2015-06-10 17 views
10

Điều gì hiệnNhững gì hiện :: * có nghĩa là trong C + +?

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

có nghĩa là gì?

Đó là từ LAStools, trong lasreader.hpp

BOOL là một typedef bool (từ mydefs.hpp), nhưng tôi không biết những gì dòng này được tuyên bố, đặc biệt là (dấu chấm kép) ::*, và rằng nó trông giống như một gọi hàm.

+11

con trỏ tới thành viên. –

+0

Giống như bí danh cho một phương thức? Vì không có thành viên (biến hay phương thức) có tên 'read_simple' trong lớp này. CPP cho tiêu đề này không sử dụng biến có tên 'read_simple', nhưng tôi không thấy bất kỳ khai báo nào cho nó. Và lớp học này không mở rộng bất cứ điều gì .. có lẽ tôi chỉ thiếu một cái gì đó – Matt

+1

bài liên quan: https://stackoverflow.com/questions/670734/c-pointer-to-class-data-member – coincoin

Trả lời

11

Đó là pointer to member function. Cụ thể, read_simple là một con trỏ trỏ đến hàm thành viên của lớp LASreader lấy 0 đối số và trả về một BOOL.

Từ ví dụ trong 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

Cảm ơn! Bây giờ tôi chỉ cần tìm ra lý do tại sao họ làm điều này. :) Thành viên đó trỏ vào một hàm thành viên ảo thuần túy. – Matt

+2

@Matt Không có gì sai với điều đó. Khi bạn gọi nó với một cá thể, nó sẽ vẫn đi qua cùng một tiến trình gửi đi ảo. – Barry

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

read_simple là một con trỏ tới một hàm thành viên của lớp LASreader rằng không có đối số và trả về một BOOL.

Các vấn đề liên quan