C++:模板类的Typedef

Ror*_*ach 0 c++ class systemc

我正在尝试创建typedef一个矢量类.我在SO上发现了类似的问题,但是它们关注的是接受不同类型数据的模板类,而我的类是基于整数的模板.

所以,我的课程定义如下:

namespace sc_dt {
  template <int W> class sc_bv { ... }; //meaning systemc_bit_vector
}
Run Code Online (Sandbox Code Playgroud)

我想使用typedef所以我不必sc_dt::每次都输入.但是,使用这个:

typedef sc_dt::sc_bv<int> sc_vector;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

模板参数列表中参数1的类型/值不匹配

我该如何解决?

Max*_*hof 5

typedefs不能模板化.然而,usings可以(并且这实现了期望的效果):

template<int W>
using sc_vector = sc_dt::sc_bv<W>;
Run Code Online (Sandbox Code Playgroud)


Nat*_*ica 5

namespace sc_dt {
  template <int W> class sc_bv { ... } //meaning systemc_bit_vector
}
Run Code Online (Sandbox Code Playgroud)

有一个非类型模板参数.当你实例化一个对象时,sc_bv你需要给它一个int常数

sc_dt::sc_bv<2> foo;
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样不同于

typedef sc_dt::sc_bv<int> sc_vector;
Run Code Online (Sandbox Code Playgroud)

你给它一个类型,而不是一个值.

如果您知道要使用的值,sc_vector那么您可以使用

typedef sc_dt::sc_bv<the_value_that_you_want_to_use> sc_vector;
Run Code Online (Sandbox Code Playgroud)

或者如果您只想sc_vector成为类模板的新名称,那么您可以使用别名模板

template<int value>
using sc_vector = sc_dt::sc_bv<value>;
Run Code Online (Sandbox Code Playgroud)

然后让你使用sc_vector喜欢

sc_vector<some_value> foo;
Run Code Online (Sandbox Code Playgroud)