我有以下代码片段:

template <typename T>
struct ChildStruct
{
  typedef std::map<int,T> Tmap;
};

struct DataStruct: public ChildStruct<long>
{

};

void Test()
{
  DataStruct::ChildStruct<long>::Tmap map;
}


是否可以从DataStruct外部访问位于ChildStruct中的Tmap typedef,而无需在Datastruct内部对这个ChildStruct进行类型定义?

当我在Visual Studio中使用提到的代码段时,一切正常,但是linux / macos g ++给我错误:

error: 'ChildStruct' is not a member of 'DataStruct'


我通过在od DataStruct中定义一个辅助typedef找到了一种方法:

struct DataStruct: public ChildStruct<long>
{
    typedef ChildStruct<long> ChildStructLong;
};

void Test()
{
    DataStruct::ChildStructLong::Tmap map;
}


但是我会提供一种没有ChildStructLong定义的方法。

谢谢!

编辑:

解决方案称为Christian Sau,直接从DataStruct外部调用ChildStruct。有时最简单的解决方案是最好的解决方案;-)

最佳答案

使用以下内容:

typename Foo<double>::my_typedef blah;

关于c++ - 如何从继承的模板访问typedef,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6271308/

10-13 08:35