Geçenlerde buna benzer bir sınıf ilan var: Ben geçirilen bağlı üye işlevine işaretçisi almak istiyorum Bu örnektekullanın std :: fonksiyon sarmak için statik olmayan üye işlev işaretçisi
class Foo {
public:
void run();
private:
void foo();
void boo();
void doo();
std::function<void()>getFunction(int);
};
tamsayı.
void Foo::run(){
std::function<void()> f;
for(int i = 0; i < 3; i++){
f = getFunction(i);
f();
}
}
std::function<void()>Foo::getFunction(int i){
switch(i){
case 0: return foo;
case 1: return Foo::boo;
case 2: return this->*doo;
}
}
Tüm durumlar derleyici hatalarına neden olur. case 1
için çalışmak üzere static
ekleniyor ancak statik üyeler kullanmamayı tercih ediyorum.
static
anahtar sözcüğünü kullanmadan bu işaretçileri düzgün şekilde almanın bir yolu var mı?
Statik işlevini kullanmamayı tercih (bunu varsayarak önemlidir kendileri tarafından iç fonksiyonları değil işlev işaretçileri çağırmak için güçlü olmak meselesi), ancak bu durumda sizi fonksiyonunuzu benzersiz parametrelerle benzersiz bir şekilde kullanın, semantik olarak buna değer mi? Ve hala bir yorum olarak, bir işleve erişmek için bu tür bir yöntemin kullanılması ve/veya uzatılması kolay olacaktır. Belki bir Enum kullanmak daha açık olacaktır. –