此代码示例可以正常运行并完成它应该执行的操作。
template <typename T>
struct base {
base(T a) {};
};
struct b : public base<int> {
b() : base(3) {};
};
我想利用构造函数中带有自动扣除模板参数的C ++ 17特性,并执行以下操作:
struct b : public base { // note lack of <int>
b() : base(3) {};
};
没有一些丑陋的黑客可以吗?
答案 0 :(得分:12)
模板参数扣除规则不允许这样做。而且他们不太可能。考虑一下:
struct b : public base { // note lack of <int>
b() : base(3) {}
b(int) : base(false) {}
};
现在b
的基类是什么?有人可能会争辩说,如果基类的所有初始化都对类型达成一致,那么它是可行的。但是在实践中很难检查它(想想c&#t; tors所在的单独的目标文件),而且看起来IMO对于某个功能来说太有用了。
因此,总而言之,您无法避免为基类模板指定模板参数。