Mam funkcję szablonu i chcę zapewnić podczas kompilacji, że nie jest ona tworzona na podtypie lub nadtypie danej klasy.Jak mogę utworzyć kompilację czasu, że szablon ma określony typ?
Jak mogę spowodować błąd kompilatora C++, jeśli jest naruszony?
class base {
};
class derived : public base {
};
class lowest : public derived {
};
template <typename T>
bool isCorrect(const T& obj) {
typedef foo<T> D;
foo<T> *def = foo<T>::find();
return (def && def->getAnswer(object));
}
Chcę isCorrect
aby być dostępne tylko dla klasy derived
, ale nie base
lub lowest
. Zauważ, że może być wiele innych najniższych klas i ciąg klas podstawowych do wykluczenia, a także alternatywne klasy pochodne, które są dopuszczalne.
Czy istnieje sposób w C++, aby ograniczyć szablon do zastosowania tylko do klas pochodnych, które ja jawnie określić?
możliwe duplikat [Wiązania szablonów C++] (http://stackoverflow.com/questions/122316/template-constraints-c) –
W szczególności może to być przydatne: http://www.boost.org/doc/libs/1_48_0/libs/concept_check/concept_check.htm –
Dlaczego po prostu nie piszesz przeciążenia? – GManNickG