31 Mayıs 2010, PAZARTESİ
nasıl aşırı bir işlev için bir işaretçi belirtmek için?
std::for_each()
algoritma, bir işlevde geçmek istiyorum. örneğin:
class A {
void f(char c);
void f(int i);
void scan(const std::string& s)
{ std::for_each(s.begin(), s.end(), f); }
};
Derleyici yineleyici türü tarafından f()
gidermek için beklerdim. Görünüşe göre, (gcc 4.1.2) bunu yapmaz. Nasıl 6 ** belirtmek istiyorum olabilir miyim?
çok teşekkürler
CEVAP
31 Mayıs 2010, PAZARTESİ
static_cast<>()
f
kullanmak için hangi belirlemek için işlev imzası işlev işaretçisi türü ima göre kullanabilirsiniz:
// Uses the void f(char c); overload
std::for_each(s.begin(), s.end(), static_cast<void (A::*)(char)>(&f));
// Uses the void f(int i); overload
std::for_each(s.begin(), s.end(), static_cast<void (A::*)(int)>(&f));
Ya da bunu yapabilirsiniz:
// The compiler will figure out which f to use according to
// the function pointer declaration.
void (*fpc)(char) = &A::f;
std::for_each(s.begin(), s.end(), fpc); // Uses the void f(char c); overload
void (*fpi)(int) = &A::f;
std::for_each(s.begin(), s.end(), fpi); // Uses the void f(int i); overload
Eğer f
Bir üye işlevi varsa, o durumda, the solution presented in this Dr. Dobb's article mem_fun
, ya da kullanmak gerekir.
Bunu Paylaş:
Nasıl bir işlev adı için Python ile bi...
Nasıl slideDown (veya göstermek) Kulla...
Nasıl düz İngilizce, seçmelerde açıkla...
Nasıl wget ile konumunu belirtmek için...
Nasıl bir kurucu veya bir işlev için u...