派生自模板基类的模板构造函数

Ant*_*ton 4 c++ inheritance templates c++11

只是好奇,是否有可能从模板类继承并在派生类的构造函数中调用基类的构造函数,该构造函数也是模板化的并且没有参数来推断其类型?

template<typename T>
struct Base {
    template<typename D>
    Base() {                // no argument of type D to infer from
        static_assert(std::is_same<T,D>::value, "");
    }
};

struct Derived : Base<int> {
    Derived()  : Base<int>::Base<int>() {} // is there a way to write it correctly?
};
Run Code Online (Sandbox Code Playgroud)

在我的特定情况下,我可以用模板方法替换模板构造函数,但这仍然是一个关于语言灵活性的有趣问题。

Ben*_*igt 5

C++ 标准对此有何评论(第 14.8.1 节):

[ 注意:因为显式模板实参列表跟在函数模板名之后,并且因为转换成员函数模板和构造函数成员函数模板是在不使用函数名的情况下调用的,所以没有办法为这些函数模板提供显式模板实参列表。— 尾注 ]

这是一个注释,而不是一条规则,因为它实际上是其他两条规则的结果,一条在同一部分:

在引用函数模板特化时,可以通过使用模板参数列表限定函数模板名称来指定模板参数,就像在使用类模板特化时指定模板参数一样。

从 12.1

构造函数没有名字。