[英]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.