2010-06-16 27 views
21

wiem, że to możliwe, aby oddzielić, aby utworzyć wskaźnik do funkcji składowej jak tenwskaźnik do const funkcji członka typedef

struct K { void func() {} }; 
typedef void FuncType(); 
typedef FuncType K::* MemFuncType; 
MemFuncType pF = &K::func; 

Czy istnieje podobny sposób skonstruować wskaźnik do const funkcji? Próbowałem dodać const w różnych miejscach bez powodzenia. Grałem około niektóre z gcc i jeśli zrobić szablon odliczenia na czymś jak

template <typename Sig, typename Klass> 
void deduce(Sig Klass::*); 

To pokaże Sig z podpisem z funkcją const tylko dołączona na końcu. Jeśli zrobisz to w kodzie, będzie to narzekać, że nie możesz mieć kwalifikatorów na typie funkcji. Wydaje się, że powinno być możliwe, ponieważ dedukcja działa.

Odpowiedz

32

Chcesz to:

typedef void (K::*MemFuncType)() const; 

Jeśli chcesz nadal opierać MemFuncType na FuncType, trzeba zmienić FuncType:

typedef void FuncType() const; 
typedef FuncType K::* MemFuncType; 
+0

Tak masz rację, to działa! Pomyślałem, że spróbowałem tego drugiego, ale chyba nie, to była kolejna maszyna, może stary kompilator. Będę musiał ponownie sprawdzić jutro. – oldcig

6

Nieznaczne wyrafinowanie pokazujący jak to zrobić bez typedef. W kontekście wyprowadzonym, takim jak poniższy, nie można użyć polecenia typedef.

template <typename Class, typename Field> 
Field extract_field(const Class& obj, Field (Class::*getter)() const) 
{ 
    return (obj.*getter)(); 
} 

stosowane do niektórych klas z const getter:

class Foo { 
public: 
    int get_int() const; 
}; 

Foo obj; 
int sz = extract_field(obj, &Foo::get_int); 
Powiązane problemy