2016-06-24 183 views
1
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 

爲什麼構造函數的隱式繼承不起作用,如果有必要,在這種情況下如何創建正確的構造函數?可變參數構造函數繼承

回答

3

沒有必要的typename這裏:

using myBase = typename Base<_DOUBLE,Dimensions> ; 

構造函數是不能繼承的,除非與using關鍵字明確地規定(見Inheriting constructors)。

template<size_t Dimensions> 
class Derived: public myBase<Dimensions> 
{ 
public: 
    using myBase<Dimensions>::myBase; 
};