[C++] Typ auf Default-Konstruktor prüfen
Verfasst: 08.04.2013, 19:13
Moin Leute!
Ich muss mal wieder an meine Factory-Klasse ran. Letztens habt ihr mir ja bereits heldenhaft dabei geholfen, die Fabrik sowohl für kopierbare als auch für nicht-kopierbare Typen zu spezialisieren, wobei die Kopierbarkeit automatisch aus dem Template-Parameter abgeleitet wird. Dafür nochmal ein dickes Dankeschön!
Da es keine wirkliche Möglichkeit gab, die Kopierbarkeit einer Klasse zu prüfen, prüfe ich stattdessen darauf, ob die Klasse von boost::noncopyable ableitet. Das geht ganz banal mit "std::is_base_of<boost::noncopyable, MeineKlasse>". Meine Frage lautet nun: gibt es auch irgendeine Möglichkeit, auf die Anwesenheit eines Standardkonstruktors zu testen?
Ha. Manchmal muss man nur die Frage tippen, um die Antwort nebenbei schon zu bekommen. Es gibt laut C++11-Standard unter anderem ein is_constructible<Typ, Param...> und ein is_copy_constructible<Typ>. Nur leider existieren diese Klassen nicht in der Microsoftschen Dokumentation zu <type_traits>. Was wahrscheinlich bedeutet, dass MS es für zu mühsam hielt, die korrekt zu implementieren.
Grmpf.
Bye, Thomas
Ich muss mal wieder an meine Factory-Klasse ran. Letztens habt ihr mir ja bereits heldenhaft dabei geholfen, die Fabrik sowohl für kopierbare als auch für nicht-kopierbare Typen zu spezialisieren, wobei die Kopierbarkeit automatisch aus dem Template-Parameter abgeleitet wird. Dafür nochmal ein dickes Dankeschön!
Da es keine wirkliche Möglichkeit gab, die Kopierbarkeit einer Klasse zu prüfen, prüfe ich stattdessen darauf, ob die Klasse von boost::noncopyable ableitet. Das geht ganz banal mit "std::is_base_of<boost::noncopyable, MeineKlasse>". Meine Frage lautet nun: gibt es auch irgendeine Möglichkeit, auf die Anwesenheit eines Standardkonstruktors zu testen?
Ha. Manchmal muss man nur die Frage tippen, um die Antwort nebenbei schon zu bekommen. Es gibt laut C++11-Standard unter anderem ein is_constructible<Typ, Param...> und ein is_copy_constructible<Typ>. Nur leider existieren diese Klassen nicht in der Microsoftschen Dokumentation zu <type_traits>. Was wahrscheinlich bedeutet, dass MS es für zu mühsam hielt, die korrekt zu implementieren.
Grmpf.
Bye, Thomas