SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BurnedInDotCom

    BurnedInDotC

    3 NİSAN 2010
  • jesiel santos

    jesiel santo

    15 Ocak 2009
  • kindlechatmail

    kindlechatma

    25 AĞUSTOS 2010