有没有办法从朋友类访问成员函数?
// 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
答案 0 :(得分:3)
如果get_class_from_item
应该是某种类似的Factory函数,那么你需要将它设置为静态。您收到错误是因为您的编译器正在类get_class_from_item
中查找名为A
的函数。它永远不会在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
的某些私有元素?仔细考虑这一点,大多数时候有更好的方法来获得你想要的东西,而不是使用friend
丢弃所有的封装。
[编辑] 从代码示例中删除了一行以将其剥离到最低限度。
答案 1 :(得分:2)
不,因为get_class_from_item
是一个成员函数,你需要一个类B
的实例来调用它。