有没有办法从友元类访问成员函数?
// foo.h
template<typename T>
class A
{
bool operator()(Item* item)
{
ObjectClass c = get_class_from_item(item); // compiler error
...
}
};
class B
{
...
template<typename T> friend class A;
...
ObjectClass get_class_from_item(Item* item);
};
如果重要我使用 gcc 4.5.2
最佳答案
如果 get_class_from_item
应该是某种 Factory 函数(看起来确实如此),您需要将其设为静态。您收到错误是因为您的编译器正在类 A
中寻找名为 get_class_from_item
的函数。它永远不会看到 B
中的函数,因为它不在范围内并且您没有 B
类的实例。这是维基百科上的更多解释:http://en.wikipedia.org/wiki/Factory_function .
应该这样做:
class A
{
bool operator()(Item * item)
{
ObjectClass c = B::get_class_from_item(item);
...
}
};
class B
{
static ObjectClass get_class_from_item(Item* item);
};
另外,A
需要成为 B
的友元类是有原因的吗?还是您只是为了让 get_class_from_item
工作而这样做? A
是否需要能够访问 B
的一些私有(private)元素?仔细想想,大多数时候有更好的方法来获得你想要的东西,而不是使用 friend
丢弃所有封装。
[编辑] 从代码示例中删除行以将其剥离到最低限度。
关于C++ 从 friend 类访问成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5510853/