我有一个模板类(我无法修改),我们将其称为SomeClass
,我想专门针对仅从特定类派生的类。在this answer之后,我能够在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
@AndyG如果我没有专注,我会得到“A,B,C”。我想要专门为A和B. – eddi
这看起来像这样的副本:https://stackoverflow.com/questions/12858839/using-sfinae-for-template-class-specialisation如果它不是重复的,那么它是一个近亲,你的答案可能是... gcc 4.9.2和所有 –
@Drt正如我在OP中提到的那样 - 这个问题是我的出发点 - 我只是不确定如何适应我的需求。我目前的尝试不适用于4.9.2。 – eddi