C++ 从 friend 类访问成员函数

标签 c++ friend friend-class

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

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

相关文章:

C++:如何使一组派生类能够访问一个类的私有(private)成员?

c++ - 是 '#include "file2.c "' different from ' gcc file1.c file2.c'?

c++ - 如何在 win32 中使用 GetSaveFileName 保存文件?

c++ - 是否可以使用非常量指针调用非常量函数,以及当两个 unique_ptr 指向同一个对象时程序将如何运行?

c++ - 友元函数范围和声明点

c++ - MSVC 2008 错误 'Type' 不是结构(尽管它是)

c++ - 在 C++ 中返回 vector 标准

命名空间中的 C++ 前向声明和友元

java - 为什么 Java 中缺少友元指令?

C++ friend 类无效使用不完整类型 OOP