Wykryj, czy w czasie kompilacji istnieje domyślny konstruktor [duplikat]
To pytanie ma już odpowiedź tutaj:
Czy istnieje sposób przetestowania, czy klasa C ++ ma domyślny konstruktor (inny niż cechy typu dostarczone przez kompilator)? 7 odpowiedziPróbuję sprawdzić, czy istnieje domyślny konstruktor dla argumentu szablonu. Chcę zrobić coś takiego:
template <typename A>
class Blah
{
Blah() { A* = new A(); }
}
Ale chcę wykryć w czasie kompilacji za pomocą SFINAE lub inna sztuczka, jeśli ten konstrukt istnieje, i podnieśstatic_assert
własnego, jeśli nie.
Problem pojawia się, gdy mam zajęcia (np.std::vector
) które nie mają „domyślnego konstruktora”, ale konstruktora z domyślnymi parametram
Używajstd::has_trivial_default_constructor
nie zwróci prawdy. Chociaż mogę używaćnew vector<T>()
.