Có mã như:Tiếp cận người bạn hàm được định nghĩa trong lớp
#include <iostream>
class A{
public:
friend void fun(A a){std::cout << "Im here" << std::endl;}
friend void fun2(){ std::cout << "Im here2" << std::endl; }
friend void fun3();
};
void fun3(){
std::cout << "Im here3" << std::endl;
}
int main()
{
fun(A()); // works ok
//fun2(); error: 'fun2' was not declared in this scope
//A::fun2(); error: 'fun2' is not a member of 'A'
fun3(); // works ok
}
Làm thế nào để truy cập vào chức năng fun2()?
+1: Câu hỏi được xây dựng kỹ lưỡng. –
Chúng ta thấy loại mã này trong con trỏ thông minh của boost: intrusive_ptr, điều này làm cho tôi bắt đầu câu đố đầu tiên. Đối với tôi nó không có ý nghĩa để xác định nó theo cách đó, thay vì xác định một người bạn ở đâu đó trong phạm vi và đánh dấu một nguyên mẫu làm bạn trong khai báo phạm vi lớp, đó là dễ đọc hơn! – Gabriel