可变构造函数继承
variadic constructor inheritance
template<typename Type, size_t Dimensions>
struct Base
{
template <typename ... Args>
Base (const Args& ... args) : /*initialize*/ {}
/*
some functionality
*/
};
template<size_t Dimensions>
using myBase = typename Base<_DOUBLE,Dimensions> ;
template<size_t Dimensions>
class Derived: public myBase<Dimensions>
{
/*
some additional functionality
*/
}
myBase<2> mB(1.0,2.0); //works
Derived<2> D(1.0,2.0); //error C2661: 'Derived<2>::Derived': no overloaded function takes 2 arguments
为什么构造函数的隐式继承不起作用,如果有必要,在这种情况下如何创建正确的构造函数?
这里不需要typename
:
using myBase = typename Base<_DOUBLE,Dimensions> ;
构造函数不会被继承,除非使用 using
关键字明确指定(参见 Inheriting constructors)。
template<size_t Dimensions>
class Derived: public myBase<Dimensions>
{
public:
using myBase<Dimensions>::myBase;
};
template<typename Type, size_t Dimensions>
struct Base
{
template <typename ... Args>
Base (const Args& ... args) : /*initialize*/ {}
/*
some functionality
*/
};
template<size_t Dimensions>
using myBase = typename Base<_DOUBLE,Dimensions> ;
template<size_t Dimensions>
class Derived: public myBase<Dimensions>
{
/*
some additional functionality
*/
}
myBase<2> mB(1.0,2.0); //works
Derived<2> D(1.0,2.0); //error C2661: 'Derived<2>::Derived': no overloaded function takes 2 arguments
为什么构造函数的隐式继承不起作用,如果有必要,在这种情况下如何创建正确的构造函数?
这里不需要typename
:
using myBase = typename Base<_DOUBLE,Dimensions> ;
构造函数不会被继承,除非使用 using
关键字明确指定(参见 Inheriting constructors)。
template<size_t Dimensions>
class Derived: public myBase<Dimensions>
{
public:
using myBase<Dimensions>::myBase;
};