Bir şablon sınıfım var (değiştiremediğim), SomeClass
diyelim, sadece belirli bir sınıftan türeyen sınıflar için uzmanlaşmak istiyorum. this answer sonra bunu gcc 6.3.1, ancak maalesef gcc 4.9.2 içinde yapmak gerekiyordu ve orada "kısmi uzmanlık SomeClass<T>
herhangi bir şablon argümanları" uzmanlık yok söyleyerek orada başarısız.şablon uzmanlığı
Gcc 4.9.2 ile çalışmasını sağlamak için aşağıdakileri değiştirebileceğim bir yol var mı?
#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;
}
Çıktı:
A,A,C
@AndyG Uzmanlaşmamış olsaydım "A, B, C" alırdım. A ve B için uzmanlık istiyorum. – eddi
Bunun bir kopyası gibi görünüyor: https://stackoverflow.com/questions/12858839/using-sfinae-for-template-class-specialisation Eğer çift değilse o zaman yakın bir akrabası ve cevabınız muhtemelen ... gcc 4.9.2 ve OP'de belirtildiği gibi tüm –
@Drt - bu soru benim başlangıç noktamdı - ihtiyaçlarım için nasıl uyarlayacağımı bilmiyorum. Şu anki girişimim 4.9.2 ile çalışmıyor. – eddi