0

有没有办法从朋友类访问成员函数?

// 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

4

2 回答 2

3

如果get_class_from_item应该是某种工厂函数,它似乎是,你需要使它成为静态的。您收到错误是因为您的编译器正在寻找一个名为get_class_from_itemclass的函数A。它永远不会看到该函数,B因为它不在范围内,并且您没有 class 的实例B。以下是关于 Wikipedia 的更多解释: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.

[编辑]从代码示例中删除行以将其剥离到最低限度。

于 2011-04-01T08:32:57.260 回答
2

不,因为get_class_from_item是一个成员函数,你需要一个类的实例B来调用它。

于 2011-04-01T08:33:57.743 回答