模板化类的C ++ typedef

时间:2018-01-29 12:14:40

标签: c++ templates typedef

在C ++中为模板化类创建别名的最佳方法是什么?

template<typename T>
class Dummy1
{
public:
    Dummy1(T var) : myVar1(var) {
    }
    ~Dummy1() {
    }
private:
    T myVar1;
};

C风格将是:

typedef Dummy1<int> DummyInt;

在C ++中,据我所知,我会写:

class DummyInt : public Dummy1<int> 
{
    DummyInt(int a) : Dummy1<int>(a) { }
    ~DummyInt() { }
}

有更好/更短的方式吗?因为当我从base继承时,我必须每次都声明构造函数。

我需要Dummy1<int>的别名,否则我需要在整个代码中使用模板选项(如指针和引用)。但我想这样做。

3 个答案:

答案 0 :(得分:7)

如果你只是必须使用继承,那么你可以避免重复中的构造函数,只需继承它们:

struct DummyInt : Dummy1<int> {
  using Dummy1::Dummy1;
};

否则,只需像你一样使用别名。如果您希望它不是“C方式”,您可以使用现代C ++风格:

using DummyInt = Dummy1<int>;

答案 1 :(得分:3)

我更喜欢(C ++ 11及之后):

using DummyInt = Dummy1<int>;

在我看来,没有理由不在这里使用别名。

答案 2 :(得分:3)

您也可以使用typedef或在C ++中使用

typedef Dummy1<int> DummyInt;
using DummyInt = Dummy1<int>;

在现代C ++代码IMO中,你再也看不到typedef了。