2017-01-22 1 views
0

Ist es möglich, eine Funktion/Klassenvorlage Überladung basierend auf Type_traits Informationen zu haben?C++ Gibt es eine Möglichkeit, eine Template-Überladung basierend auf type_traits zu haben?

Beispiel:

#include <type_traits> 

template<typename Object> 
class object_worker 
{ 
public: 
    object_worker(Object&& o) // o - is not POD 
    { 
     // do something 
    } 
}; 

template<typename Object> 
class object_worker<std::is_pod<Object>::value == true> // how to make this thing work? 
{ 
public: 
    object_worker(Object &&o) // o - is POD 
    { 
     // do something different 
    } 
}; 
  • Hat es etwas mit einer bestimmten Technik zu tun? wie Teil Template-Spezialisierung
  • Wenn dies erreicht werden kann, was ist der Name für das? (Z Teil Template-Spezialisierung, Konzepte)

Antwort

1

Ja, können Sie etwas tun. Es ist sehr weit verbreitet.

template<typename T, bool = is_pod<T>::value>> 
class foo 
{ 
}; 

// This is a partial template specialization. 
// Triggered only when is_pod<T>::value is true 
template<typename T> 
class foo<T, true> // T can be only a POD type 
{ 
}; 
+0

meinen Tag gerettet! Sollte es nicht eher _full specialization_ für den zweiten Template-Parameter heißen? Ich dachte, _partial_ ist so etwas wie: 'Vorlage Klasse cls {};' – andrgolubev

+0

Hoffe nur, niemand instanziiert 'foo x;': –

+0

@KerrekSB Aye, ist es am besten, einen Wrapper um diese oder vielleicht als eine * detail * basisklasse. – DeiDei

Verwandte Themen