Ermöglichen Sie das Mitglied der Klasse abhängig von der Vorlage
Ich weiß bereits, dass Sie die Methode einer Klasse mit @ aktivieren können (oder nichtstd::enable_if
zum Beispiel
template<size_t D, size_t E>
class Field
{
...
size_t offset(const std::array<float,D>& p) const
{
...
}
template<typename TT = size_t>
typename std::enable_if<D!=E, TT>::type
offset(const std::array<float,E>& p) const
{
return offset(_projection(p));
}
...
};
Dies hilft nicht nur, in einem bestimmten Fall ungültige Funktionen aufzurufen, sondern auch Überladungsfehler zu beseitigen ... was für mich sehr schön ist!
Ich möchte noch weiter gehen und einige meiner Klassenmitglieder nur dann anwesend machen, wenn sie gebraucht werden. Auf diese Weise würde ich eine Fehlermeldung erhalten, wenn ich versuche, ein Objekt zu verwenden, das andernfalls nicht initiiert worden wäre.
Ich habe versucht, @ zu t
template<size_t D, size_t E>
class Field
{
...
template<typename TT = projectionFunc>
typename std::enable_if<D!=E, TT>::type _projection;
}
Aber der Compiler sagt mir:
erreur: data member ‘_projection’ cannot be a member template
ibt es eine Möglichkeit, das zu erreichen, was ich wil