Überprüfen Sie, ob ein Mitglied mit enable_if existiert
Hier ist, was ich versuche zu tun:
template <typename T> struct Model
{
vector<T> vertices ;
#if T has a .normal member
void transform( Matrix m )
{
each vertex in vertices
{
vertex.pos = m * vertex.pos ;
vertex.normal = m * vertex.normal ;
}
}
#endif
#if T has NO .normal member
void transform( Matrix m )
{
each vertex in vertices
{
vertex.pos = m * vertex.pos ;
}
}
#endif
} ;
Ich habe gesehen, Beispiele mit enable_if
, aber ich kann nicht verstehen, wie sich zu bewerben enable_if
zu diesem problem, oder ob es auch angewendet werden kann.
Kommentar zu dem Problem - Öffnen
enable_if
wird nicht verwendet, um zu überprüfen, ob ein Mitglied existiert, sondern es dient der Beseitigung von überlastungen. Kann ich nicht es verwenden, um etwas zu tun (Vorschlag im edit oben)?
Nein, Sie wollen eine
static, wenn
, die noch nicht existiert. Was Sie wollen, ist völlig möglich, es will einfach nicht verwenden Sie eine syntax wie die. InformationsquelleAutor der Frage bobobobo | 2012-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese hat sich Weg einfacher mit C++11.
Dinge zu beachten:
decltype
undsizeof
ohne ein Objekt.InformationsquelleAutor der Antwort Johannes Schaub - litb
Benötigen Sie eine meta-Funktion zu erkennen, Ihr Mitglied, so dass Sie verwenden können
enable_if
. Das idiom zu tun, dies wird als Mitglied Detektor. Es ist ein bisschen schwierig, aber es kann getan werden!InformationsquelleAutor der Antwort ltjax
Dies ist nicht die Antwort auf Ihre genauen Fall, aber es ist eine alternative Antwort auf die Frage, Titel und problem im Allgemeinen.
Relevanten https://ideone.com/utZqjk.
Credits zu dyreshark auf dem freenode IRC #c++.
InformationsquelleAutor der Antwort dcousens