在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>
的别名,否则我需要在整个代码中使用模板选项(如指针和引用)。但我想不这样做。
答案 0 :(得分:7)
如果你只是必须使用继承,那么你可以避免重复c++11中的构造函数,只需继承它们:
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了。