c++ - 如何在模板中使用嵌套的 typedef?

标签 c++ templates

我想导出一个类型 Test来自模板类型 Base我专注于派生类型(即 Base<Test> )。

在模板化类型中,我想使用在派生类型(模板参数)中定义的 typedef。

但是,我得到了这个编译错误:

error C2039: 'X' : is not a member of 'Test'

这是代码片段:

template <typename T>
class Base
{
protected:
  void func(typename T::X x) {}
};


class Test : public Base<Test>
{
public:
  typedef int X;
};

这是否可行,如果可行,我需要做的修复是什么?

(我看到了针对此类问题的几个答案,但看起来我的场景并没有通过前缀类型名来修复 - 它是否与从专门用于派生类型的模板派生有关?)

最佳答案

除了 typedef,您还可以将类型声明为基类中的第二个模板参数:

template <typename T, typename X>
class Base
{
protected:
  void func(X x) {}
};


class Test : public Base<Test, int>
{
public:
//  typedef int X;
};

关于c++ - 如何在模板中使用嵌套的 typedef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29014922/

相关文章:

c++ - 如何使用具有相互依赖性的模板类?

php - Codeigniter - 让我的 Controller 更干

c++ - 从函数返回的左值引用实际上是右值(从调用者的角度来看)吗?

c++ - 如何使用按钮单击进行绘制 - C++ Windows 窗体

c++ - 什么是对象切片?

c++ - 给定一个 T 和函数名称和类型,我该如何解析 T::function?

C++:如何模板化一个集合?

templates - 模板文本正文中不允许 JSF 和 EJB #{...}

c++ - 跨线程的内存管理

c++ - VS2013 中 HTMLhelp 的替代品