2016-05-27 16 views
1

Betrachten Sie die folgendeVorlage Subklassifizieren mit Teil Spezialisierung

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

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

Abgeleitet nicht den Konstruktor der Basis erben, weil es zeigt, dass Grund eine partielle Spezialisierung ist und daher einige andere Konstruktor erfordert. In meinem Fall ist das nicht so. Ich möchte hauptsächlich, dass es in verschiedenen Situationen einen anderen Namen hat. Ich suche nach einer anderen Lösung als Makros oder die folgende, falls vorhanden.

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

vor allem, weil Ich mag es nicht

Derived<n>::Type 

überall und nicht sicher verwenden möchte ich

typedef Derived<n>

für alle n ich verwende.

+2

'Vorlage mit Abgeleitet = Basis ;', jetzt nur noch verwenden 'Abgeleitet '. – ildjarn

+0

das hilft, vielen dank! –

Antwort

2

Try this:

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

Dies nutzt die C++ 11 Template-Anweisungen

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

+1

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

+1

'C++ 14'? Ich denke, sie wurden in 'C++ 11' eingeführt – PcAF

+0

meine schlechte das ist korrekt, wird bearbeiten –

Verwandte Themen