Biorąc pod uwagę deklarację klasyCzy można użyć std :: enable_if, aby wybrać specjalizację szablonów członków?
class A {
template <typename T> T foo();
};
Chciałbym specjalizować A::foo
różnych rodzajów (int
, ...) i zajęcia typu (POD, non-POD) z T
. Niestety, nie wydaje mi się, aby użyć tego ostatniego. Dodaje się nie kompiluje:
template <> int A::foo<int>(); // OK
template <typename T>
typename std::enable_if<is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
template <typename T>
typename std::enable_if<!is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
Problem jest prawdopodobnie ze względu na std::enable_if<...>
rzeczy będącej częścią podpisu funkcji, a ja nie ogłoszono takiego członka wewnątrz A
. Jak więc mogę wyspecjalizować członka szablonu na podstawie cech typu?
Ale nie można przeciążać tylko na typie zwrotnym ... –
@Janiel Gehriger 'enable_if' został stworzony do warunkowego usuwania funkcji z przeciążeniowych rozdzielczości, więc prawie dokładnie w tym przypadku. – nijansen
Tak, ale nadal mam 'A :: foo()' (i wiele innych specjalizacji dla niektórych określonych typów), które będą kolidować z tym, co zostało wybrane przez 'enable_if'. –