是否可以从构造函数中自动推导出基类模板参数?

Sta*_*ght 3 c++ templates c++17

此代码示例正常工作并完成它应该执行的操作.

template <typename T>
struct base {
    base(T a) {};
};

struct b : public base<int> {
    b() : base(3) {};
};
Run Code Online (Sandbox Code Playgroud)

我想利用构造函数中的自动演绎模板参数来使用C++ 17特性,并执行以下操作:

struct b : public base { // note lack of <int>
    b() : base(3) {};
};
Run Code Online (Sandbox Code Playgroud)

没有一些丑陋的黑客可能吗?

Sto*_*ica 12

模板参数推导规则不允许它.他们不太可能会这样做.考虑一下:

struct b : public base { // note lack of <int>
    b()    : base(3) {}
    b(int) : base(false) {}
};
Run Code Online (Sandbox Code Playgroud)

b现在的基类是什么?有人可能会争辩说,如果基类的所有初始化都对类型达成一致是可行的.但是在实践中很难检查它(想想c'tors所在的单独的目标文件),而且IMO似乎太过于有用了.

因此,总而言之,您无法避免为基类模板指定模板参数.