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

  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • Art Food Kitty - Kelly Eddington

    Art Food Kit

    7 Kasım 2006
  • Malwarebytes

    Malwarebytes

    22 Temmuz 2007