2015-06-10 25 views
10

Neler: * C++ 'da ne anlama geliyor?

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

ne anlama geliyor?

O lasreader.hpp

BOOL yılında, LAStools geliyor bir typedef bool (mydefs.hpp itibaren), ama bu hat, özellikle ::* (çift kolon yıldız) ilan edilir bilmiyorum ve bir benzediğini işlev çağrısı.

+11

üye için işaretçi. –

+0

Bir yöntemin takma adı gibi mi? Çünkü bu sınıfta 'read_simple' adında bir üye (değişken veya yöntem) yok. Bu başlık için CPP, 'read_simple' adında bir değişken kullanmaktadır, ancak bunun için herhangi bir bildirim görmüyorum. Ve bu sınıf bir şey uzatmaz .. belki bir şey eksik – Matt

+1

ilgili mesaj: https://stackoverflow.com/questions/670734/c-pointer-to-class-data-member – coincoin

cevap

11

pointer to member function. Özellikle, read_simple,sıfır argümanları alan ve BOOL döndüren sınıf LASreader sınıfının bir üye işlevinin bir işaretçisidir. cppreference örneğin kaynaktan

:

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

Teşekkürler! Şimdi sadece bunu neden yaptığını bulmalıyım. :) Bu üye saf sanal üye fonksiyonunu işaret ediyor. – Matt

+2

@Matt Bununla ilgili yanlış bir şey yok. Bir örnekle çağırdığınızda, yine aynı sanal gönderim işleminden geçer. – Barry

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

read_simple argümansızdır ve BOOL döner sınıf LASreader bir üye işlev için bir işaretçidir.