当前位置: 动力学知识库 > 问答 > 编程问答 >

c++ - Partial Template Specialization restricted to certain types

问题描述:

is it possible to write a partial template specialization that is used only for class types that, for example, inherit from a specific class or comply with some other constraint that can be expressed via type traits?

i.e., something like this:

class A{}

class B : public A{}

template<typename T>

class X{

int foo(){ return 4; }

};

//Insert some magic that allows this partial specialization

//only for classes which are a subtype of A

template<typename T>

class X<T>{

int foo(){ return 5; }

};

int main(){

X<int> x;

x.foo(); //Returns 4

X<A> y;

y.foo(); //Returns 5

X<B> z;

z.foo(); //Returns 5

X<A*> x2;

x2.foo(); //Returns 4

}

网友答案:

Usually if you want conditional partial template specialization, you'll need to provide an extra parameter, and then use enable_if:

template<typename T, typename=void>
class X {
public:
    int foo(){ return 4; }
};

template<typename T>
class X<T, typename std::enable_if<std::is_base_of<A, T>::value>::type> {
public:
    int foo(){ return 5; }
};
分享给朋友:
您可能感兴趣的文章:
随机阅读: