2015-06-10 29 views
10

CoCo oznacza: * w C++?

private: 
    BOOL (LASreader::*read_simple)(); 

oznacza?

To od LAStools w lasreader.hpp

BOOL jest typedef bool (od mydefs.hpp), ale nie wiem, co ta linia deklaruje, a konkretnie ::* (podwójną gwiazdką dwukropek), i że wygląda jak wywołanie funkcji.

+11

Wskaźnik do członka. –

+0

Jak alias do metody? Ponieważ nie ma członka (zmiennej ani metody) o nazwie 'read_simple' dla tej klasy. CPP dla tego nagłówka używa zmiennej o nazwie 'read_simple', ale nie widzę dla niej żadnej deklaracji. I ta klasa niczego nie rozszerza ... może po prostu brakuje mi czegoś związanego z – Matt

+1

powiązany post: https://stackoverflow.com/questions/670734/c-pointer-to-class-data-member – coincoin

Odpowiedz

11

To jest pointer to member function. W szczególności, read_simple jest wskaźnikiem do funkcji składowej klasy LASreader, która przyjmuje zerowe argumenty i zwraca wartość BOOL.

Z przykład w cppreference:

struct C { 
    void f(int n) { std::cout << n << '\n'; } 
}; 
int main() 
{ 
    void (C::*p)(int) = &C::f; // p points at member f of class C 
    C c; 
    (c.*p)(1); // prints 1 
    C* cptr = &c; 
    (cptr->*p)(2); // prints 2 
} 
+0

Dzięki! Teraz muszę po prostu dowiedzieć się, dlaczego to robią. :) Ten członek wskazuje na czystą wirtualną funkcję członka. – Matt

+2

@Matt Nic w tym złego. Gdy wywołasz go za pomocą instancji, będzie on nadal przechodzić przez ten sam proces wysyłania wirtualnego. – Barry

4
BOOL (LASreader::*read_simple)(); 

read_simple jest wskaźnik do funkcji składowej klasy LASreader które ma żadnych argumentów i zwraca BOOL.