我创建了一个模板类(TBase),该模板类在其主体内定义了另一个类(BaseUDT)。

#pragma once

template<class T>
class TBase
{
public:
    class BaseUDT
    {
    public:
        int a;
    };
    T m_base;
};

现在,我创建一个从TBase派生的类(TDerived)。
template<class T>
class TDerived : public TBase<T>
{
public:
    T m_derived;
    BaseUDT m_baseUDT;
};

该代码在Visual Studio上编译,但是当我尝试在Mac机器上的Xcode上编译时,会引发编译错误。使用TBase::BaseUDT也不起作用。

我一直在尝试阅读ISO c++文档,但到目前为止仍未找到任何相关内容。

最佳答案

它的名称是依赖的-声明如下:

template<class T>
class TDerived : public TBase<T>
{
public:
  T m_derived;
  typename TBase<T>::BaseUDT m_baseUDT;
};

关于c++ - 如何从派生类访问模板基类中的用户定义类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9156656/

10-08 22:49