2

好的,情况就是这样。

//foo.h
struct A1{ 
 struct A2{};
};

//bar.h
#include "MyString.h"
class A2; //note, not including foo.h
TEMPLATE_INSTIANTIATE_MAP_OF_TYPE(String,A2*); //assume compiler doesn't do this

是否有可能使上述情况起作用?我尝试创建一个MyMap<String,A1::A2*> m;但编译器抛出未定义的引用错误。是否可以在没有 bar.h import foo.h 的情况下完成上述工作?

4

2 回答 2

2

可悲的是,事实并非如此。嵌套类只能在类定义中声明。

于 2012-04-10T14:56:31.120 回答
0

这是一种在类定义之外声明嵌套类的方法。class Logic 是外部类。LogicImp 是前向声明的结构。

class Logic
{
public:

    Logic();
    ~Logic();

private:
    struct LogicImp;
    std::unique_ptr<LogicImp> limp_;
};

struct Logic::LogicImp
{
    int nLogical_;
};

Logic::Logic():limp_(new LogicImp())
{
}

Logic::~Logic()
{
}
于 2012-04-10T15:13:41.230 回答