2013-06-06 2 views
9

Prima di tutto, si noti che sto usando C++ 03 (e C++ 11 non è un'opzione). Sto usando il concetto spinta per controllare che una certa classe è default-costruibile:Posso verificare che una classe sia * non * predefinita costruibile?

BOOST_CONCEPT_ASSERT((boost::DefaultConstructible<my_class>)); 

Tuttavia, per qualche altra classe vorrei affermare che il tipo ha non avere un costruttore di default. C'è un modo per farlo?

Aggiornamento: a tutti quegli esperti super-super marcatura la questione come duplicato o già risposto senza leggerlo: Premetto già nel primo paragrafo che utilizzo già concetto spinta per controllare che le classi sono default-costruibile (che è la domanda che questo dovrebbe essere un duplicato di). Dichiaro inoltre esplicitamente che non posso usare C++ 11, quindi type_traits non sono disponibili per me. Quindi, qualcuno potrebbe indicarmi la parte specifica in cui la domanda my è stata "già risposta"? Perché non l'ho ancora trovato.

+3

se si ha accesso a da TR1 o dall'estensione del compilatore, ha la soluzione semplice. Anche il compilatore può avere una funzione intrinseca correlata. (cioè VS2010 fa) –

+0

e ti ho perso da qualche parte, non sta aggiungendo! nell'espressione citata cosa stai cercando? –

+0

@BalogPal: per quanto posso dire dal codice, queste asserzioni non funzionano restituendo un valore di verità per qualsiasi parte dell'espressione tra parentesi. Invece c'è un sacco di magia macro coinvolta, ma si riduce al codice per alcune funzioni che non verranno compilate a meno che il concetto in questione non sia valido. Trasformare il codice che non si compila nella compilazione di uno e viceversa è difficile almeno. – MvG

risposta

2

Il bit deludente è che no, questo non è possibile con il controllo del boost.

Il bit non deludente è: non stai cercando di utilizzare questo strumento al contrario?

Generalmente, si scrive codice che richiede un tipo che ha un certo numero di funzioni, come costruttori, funzioni che operano su quel tipo e così via. Non riesco a immaginare una situazione in cui scrivere codice che richiede un tipo privo di caratteristiche specifiche.

Sembra che tu non voglia programmare programmazione orientata ai concetti, ma imporre lo stile di codifica. E questo non è lo strumento giusto per questo.

+1

... perché un tipo che ha più funzioni di quelle strettamente necessarie per soddisfare un concetto, soddisfa questo concetto. – migle

+0

No, non stile di codifica. Sto usando i modelli, e il tipo effettivo verrà dato esternamente, quindi ho bisogno di un modo per controllare certe cose.Il motivo per evitare i costruttori predefiniti è di progettazione e consapevole :) – Janoma

+1

... mi sembra uno stile di programmazione ... – migle