Beachten Sie zunächst, dass ich C++ 03 verwende (und C++ 11 ist keine Option). Ich bin mit Boost-Konzept zu überprüfen, ob eine bestimmte Klasse ist default-konstruierbar:Kann ich überprüfen, dass eine Klasse * nicht * standardmäßig konstruierbar ist?
BOOST_CONCEPT_ASSERT((boost::DefaultConstructible<my_class>));
jedoch für eine andere Klasse würde ich behaupten möchte, dass die Art tut nicht einen Standardkonstruktor haben. Gibt es eine Möglichkeit, dies zu tun?
Update: an alle diese super-duper Experten die Frage als duplikate oder bereits beantwortet, ohne es zu lesen: Ich sage im ersten Absatz, dass ich bereits Boost-Konzept zu verwenden, um zu überprüfen, dass Klassen standardmäßig konstruierbar sind ist die Frage, dass dies ein Duplikat sein soll). Ich erkläre auch ausdrücklich, dass ich C++ 11 nicht verwenden kann, also stehen mir type_traits
nicht zur Verfügung. Also, könnte jemand bitte mich auf den spezifischen Teil verweisen, wo meine Frage "bereits beantwortet" wurde? Weil ich es noch nicht gefunden habe.
Wenn Sie Zugriff auf entweder von TR1 oder von Compiler-Erweiterung haben, hat es die einfache Lösung. Auch der Compiler kann eine verwandte intrinsische Funktion haben. (d. h. VS2010 tut das) –
und ich habe dich irgendwo verloren, fügt nicht hinzu! im zitierten Ausdruck, wonach du suchst? –
@BalogPal: Soweit ich aus dem Code ersehen kann, funktionieren diese Behauptungen nicht, indem sie einen Wahrheitswert für irgendeinen Teil des Klammerausdrucks zurückgeben. Stattdessen ist eine Menge Makromagie beteiligt, aber es läuft darauf hinaus, für eine Funktion zu kodieren, die nicht kompiliert wird, wenn das fragliche Konzept nicht gilt. Code umzuwandeln, der nicht kompiliert wird und umgekehrt, ist zumindest schwierig. – MvG