繁体   English   中英

模板参数的模板专业化

[英]template specialization for template parameters

我有两个模板

template<typename Policy>
class X : public Policy
{ }

template<typename T>
class SimplePolicy 
{ }

SimplePolicy可用作X的模板参数。 是否可能针对所有出现的SimplePolicy -ies(即,针对任何T )专门化X 或者,如果不可能的话,最好的策略是什么?

谢谢!

是的,您可以这样做:

#include <iostream>

using namespace std;

template<typename T>
class SimplePolicy 
{ };

template<typename Policy>
class X : public Policy
{   
    public: void Do() { cout << "Standard" << endl; }
};  

template<typename Inner>
class X<SimplePolicy<Inner> >
{   
    public: void Do() { cout << "Special" << endl; }
};  

class A{};

int main()
{   
    X<A> xa; 
    X<SimplePolicy<A>> xs; 

    xa.Do();
    xs.Do();
} 

是的,可以使用部分模板专门化

#define STATIC_ASSERT(exp) \
    typedef char static_assert_ ## __LINE__ [(exp) ? 1 : -1]

template<typename Policy>
class X : public Policy
{
public:
    enum { value = 0 };
};

template<typename T>
class SimplePolicy 
{ };

class CleverPolicy 
{ };

template <typename T>
class X< SimplePolicy<T> > : public SimplePolicy<T>
{ 
public:
    enum { value = 1 }; 
};

int _tmain(int argc, _TCHAR* argv[])
{
    STATIC_ASSERT(X<SimplePolicy<int> >::value == 1);
    STATIC_ASSERT(X<SimplePolicy<float> >::value == 1);
    STATIC_ASSERT(X<CleverPolicy>::value == 0);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM