C ++: Typedef шаблона класса - PullRequest
       33

C ++: Typedef шаблона класса

0 голосов
/ 02 октября 2018

Я пытаюсь создать 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 голосов
/ 02 октября 2018
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, как

sc_vector<some_value> foo;
0 голосов
/ 02 октября 2018

, если вы не хотите вводить пространство имен sc_dt:: каждый раз, using пространство имен или

using sc_dt::sc_bv;
0 голосов
/ 02 октября 2018

typedef s не может быть шаблонным.Тем не менее, using с может быть (и это достигает желаемого эффекта):

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