2012-07-02 39 views
3

在专门化一个类模板时,我希望有一个专门化目标成熟的类(完整的构造函数,析构函数等)和一个专业化目标基元(int,float等)。我见过的唯一部分专精是针对指针类型(通过T*)。有没有办法做到这一点?有没有办法专门化一个模板来定位基元?

+0

什么是特别的关于你想专业化不同的成熟班?他们有一些你需要的特殊成员吗? –

+0

那么,对于原语,我可以为某些操作做一个“memcpy”,而对于类,我需要分别调用每个复制操作。 – TheBuzzSaw

+1

@TheBuzzSaw:那么你不想专注于原始类/类,而是专注于基元/类,而是在POD与非POD类型上 –

回答

7

您可以使用C++ 11 type_traits。这里有一些让你开始的东西,你可以根据需要更多的专注:

#include <type_traits> 
#include <iostream> 

template<typename T, typename E = void> 
struct A; // undefined 

template<typename T> 
struct A<T, typename std::enable_if<std::is_class<T>::value && !std::is_pod<T>::value>::type> { 
     A() { std::cout << "I'm a class, but I'm not a pod type" << std::endl; } 
}; 

template<typename T> 
struct A<T, typename std::enable_if<std::is_class<T>::value && std::is_pod<T>::value>::type> { 
     A() { std::cout << "I'm a class and a pod type" << std::endl; } 
}; 

template<typename T> 
struct A<T, typename std::enable_if<!std::is_class<T>::value>::type> { 
     A() { std::cout << "I'm not a class" << std::endl; } 
}; 

class X {}; 
class Y { ~Y(){} }; 

int main() 
{ 
     A<X> a1; 
     A<Y> a2; 
     A<int> a3; 
}