2016-05-27 5 views
1

Рассмотрим следующийшаблон подклассов с частичной специализации

template<typename Type, size_t Dimensions> 
struct Base 
{ 
    Base(/*some args*/) { /*do something*/ } 
}; 

template<size_t Dim> 
class Derived : Base<double,Dim> {}; 

Derived не наследует конструктор базы, поскольку она предполагает, что база является частичной специализации и, следовательно, требует некоторой другой конструктор. Однако это не так в моем случае. В основном я хочу, чтобы у него было другое имя в разных ситуациях. Я ищу решение, отличное от макросов или следующего, если существует.

template<size_t Dim> 
struct Derived 
{ 
    typedef Base<double, Dim> Type; 
} 

в основном потому, что я не люблю использовать

Derived<n>::Type 

везде и не уверен, что хочу

typedef Derived<n>

для каждого п я использую.

+2

'шаблон с использованием производного = Base ;', теперь просто использовать 'Derived '. – ildjarn

+0

это помогает, огромное спасибо! –

ответ

2

Попробуйте это:

template<std::size_t dim> 
using foo = typename derived<dim>::type; 
//usage 
foo<n> bar; 

Это использует шаблон на C++ 11 с помощью инструкций

http://en.cppreference.com/w/cpp/language/type_alias

+1

'typename T' ->' size_t Dim'? – songyuanyao

+1

'C++ 14'? Я думаю, что они были введены в 'C++ 11' – PcAF

+0

мои плохие, это правильно, отредактирует –

Смежные вопросы