2013-06-06 15 views
9

Przede wszystkim zwróć uwagę, że używam C++ 03 (i C++ 11 nie jest opcją). Używam doładowania koncepcję, aby sprawdzić, że pewna klasa default-constructible:Czy mogę sprawdzić, czy dana klasa * nie * jest domyślna?

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

Jednak dla innej klasy chciałbym twierdzić, że typ robi nie mieć konstruktora domyślnego. Czy jest sposób na zrobienie tego?

Aktualizacja: do wszystkich tych ekspertów super-duper znakowanie pytanie jako duplikat lub już odpowiedział bez czytania go: Oświadczam w akapicie pierwszym, że już wykorzystać doładowania koncepcję, aby sprawdzić, że zajęcia są default-constructible (co jest pytanie, które ma być duplikatem). Wyraźnie stwierdzam również, że nie mogę używać C++ 11, więc type_traits nie są dla mnie dostępne. Więc, czy ktoś mógłby wskazać mi konkretną część, w której my pytanie "już odpowiedział"? Ponieważ jeszcze jej nie znalazłem.

+3

jeśli masz dostęp do albo z TR1 lub przez rozszerzenie kompilatora, ma proste rozwiązanie. Również kompilator może mieć powiązaną funkcję wewnętrzną. (czyli VS2010 ma) –

+0

i gdzieś cię straciłem, nie dodaje! w cytowanym wyrażeniu, czego szukasz? –

+0

@BalogPal: O ile mogę powiedzieć z kodu, te twierdzenia nie działają, zwracając wartość prawdy dla dowolnej części wyrażenia parentetyzowanego. Zamiast tego w grę wchodzi wiele makr magii, ale sprowadza się to do kodu dla jakiejś funkcji, która nie będzie się kompilować, dopóki nie zostanie przyjęta dana koncepcja. Przekręcanie kodu, który nie kompiluje się w kompilowanie i vice versa, jest co najmniej trudne. – MvG

Odpowiedz

2

To rozczarowujące, że nie, nie jest to możliwe przy sprawdzaniu koncepcji boost.

Nie jest tak rozczarowujący: czy nie próbujesz użyć tego narzędzia do tyłu?

Ogólnie piszesz kod, który wymaga typu, który ma pewną liczbę funkcji, takich jak konstruktory, funkcje, które działają na tym typie i tak dalej. Nie mogę sobie wyobrazić sytuacji, w której można by napisać kod, który potrzebuje typu, który nie ma określonych funkcji.

Wydaje się, że nie chcesz tworzyć programowania zorientowanego na koncepcje, ale wymuszać styl kodowania. A to nie jest odpowiednie narzędzie do tego.

+1

... ponieważ typ, który ma więcej cech niż te, które są ściśle wymagane do spełnienia koncepcji, spełnia tę koncepcję. – migle

+0

Nie, nie styl kodowania. Używam szablonów, a rzeczywisty typ zostanie podany na zewnątrz, więc potrzebuję sposobu sprawdzenia pewnych rzeczy.Powodem unikania domyślnych konstruktorów jest projektowanie i świadomość :) – Janoma

+1

... brzmi jak styl kodowania do mnie ... – migle

Powiązane problemy