C ++:模板类的Typedef

时间:2018-10-02 13:28:21

标签: c++ class systemc

我正在尝试创建我拥有的向量类的typedef。我在SO上也发现了类似的问题,但它们的重点是作为接受不同类型数据的模板的类,而我的类是基于整数的模板。

所以,我的班级是这样定义的:

namespace sc_dt {
  template <int W> class sc_bv { ... }; //meaning systemc_bit_vector
}

我想使用typedef,这样就不必每次都输入sc_dt::。但是,使用以下方法:

typedef sc_dt::sc_bv<int> sc_vector;

我收到以下错误:

  

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

我该如何解决?

3 个答案:

答案 0 :(得分:5)

typedef不能被模板化。但是,using可以(并且可以达到预期的效果):

template<int W>
using sc_vector = sc_dt::sc_bv<W>;

答案 1 :(得分:5)

a.pie(values, labels=header, colors=colors, startangle=90, autopct='%.1f%%') 

具有非类型模板参数。实例化namespace sc_dt { template <int W> class sc_bv { ... } //meaning systemc_bit_vector } 的对象时,需要为其提供一个sc_bv常量,例如

int

如您所见,这与

不同
sc_dt::sc_bv<2> foo;

在其中为其指定类型而不是值的地方。

如果您知道要为typedef sc_dt::sc_bv<int> sc_vector; 使用什么值,则可以使用

sc_vector

或者如果您只是想将typedef sc_dt::sc_bv<the_value_that_you_want_to_use> sc_vector; 作为类模板的新名称,则可以使用别名模板,如

sc_vector

然后可以让您像使用template<int value> using sc_vector = sc_dt::sc_bv<value>;

sc_vector

答案 2 :(得分:3)

如果您不想每次都输入名称空间sc_dt::,请using名称空间或

using sc_dt::sc_bv;