簡體   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