У меня есть класс шаблона (который я не могу изменить), позвоните ему SomeClass
, который я хотел бы специализировать для классов, которые производятся только из определенного класса. Следуя этому ответу, я смог сделать это в gcc 6.3.1, но, к сожалению, мне нужно сделать это в gcc 4.9.2, и там он не работает во время компиляции "частичная специализация SomeClass<T>
не специализирует никаких шаблонных аргументов".
Есть ли способ изменить нижеследующее, чтобы он работал с gcc 4.9.2?
#include <iostream>
#include <string>
using namespace std;
struct A {
string name() { return "A"; }
};
struct B : A {
string name() { return "B"; }
};
struct C {
string name() { return "C"; }
};
template<typename T, typename = std::enable_if_t<std::is_base_of<A, T>::value>>
using enable_if_a = T;
template<typename T>
struct SomeClass {
using Type = T;
};
template<typename T>
struct SomeClass<enable_if_a<T>>
{
using Type = A;
};
int main(int, char**)
{
SomeClass<A>::Type el1;
SomeClass<B>::Type el2;
SomeClass<C>::Type el3;
cout << el1.name() << "," << el2.name() << "," << el3.name() << endl;
}
Вывод:
A,A,C