c++ - 类型定义非类型模板参数

标签 c++ templates

我想在类之外访问模板参数。我通常这样做:

template <class T>
class A
{
  typedef typename T T;
}

A<int>::T;

我希望能够对非类型模板参数执行相同的操作。这不起作用:

template <int T>
class A
{
  typedef typename T T;
}

A<3>::T;

我会解释为什么我需要这个。我想定义第二个类如下:

template <class C>
class B
{
  static int func() {return C::T;}
}

B<A<3> >::func();

正确的做法是什么? 非常感谢。

最佳答案

那是因为 T 不是类型名称,您不能 typedef 它。它是一个 int 值,如果您想将它作为类的静态成员访问,则需要一个静态成员 int。看起来你真正想要的是这样的:

template <int T>
class A
{
  public:
    static const int x = T;
};

doSomething(A<5>::x);

关于c++ - 类型定义非类型模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799312/

相关文章:

flash - AS3 模板(如 C++)

c++ - 类模板上的运算符重载

c++ - 在 C++ 中拆分字符串

c++ - 为 iOS 成功构建后没有 libclang.a?

c++ - 迭代器跳过循环

c++ - 如何使用互斥量作为成员变量?没有 'simple_encoder' 的拷贝构造函数被隐式删除

c++ - 为什么我不能将模板参数传递给另一个模板?

c++ - 使用访问者设计模式重复访问 N 叉树中的子节点值

c++ - 打印不同类型成员的函数

C++:从模板化基类覆盖函数