转发声明一个内部类类型,是否可能?

时间:2012-04-10 14:51:35

标签: c++ templates

好的就是这种情况。

//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导入foo.h可以进行上述工作吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

这是一种在类定义之外声明嵌套类的方法。 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()
{
}