从C ++ 11中的类模板继承构造函数(其中一些是模板)的语法是什么?
template <class T>
struct Base
{
using type = T;
explicit constexpr Base(const type& x): value{x} {};
template <class U> explicit constexpr Base(U&& x): value{std::forward<U>(x)} {};
type value;
}
struct Derived: Base<bool>
{
using Base::Base<bool>; // Does not seem to work ?!?
}
答案 0 :(得分:6)
您来自Base<bool>
。所以你的基类是Base<bool>
,继承构造函数是通过
using Base<bool>::Base;
Base<bool>
之后你不需要::
,事实上,如果你把它放在代码中,代码就不会编译。构造函数仍被称为Base
,而不是Base<bool>
。这与引用类模板的成员函数一致:您使用例如void Foo<int>::f()
而非void Foo<int>::f<int>()
引用Foo
的成员函数f()
。