模板参数的模板专门化
template specialization for template parameters
我有两个模板
template<typename Policy>
class X : public Policy
{ }
template<typename T>
class SimplePolicy
{ }
SimplePolicy
可作为X
的模板参数。是否有可能将X
专门化为所有SimplePolicy
-ies的出现(即任何T
)?或者如果不可能的话,最好的策略是什么?
谢谢!
是的,你可以这样做:
#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;
}
相关文章:
- 是否可以对零模板参数进行模板专门化
- 我能否根据其运算符()的签名专门化可变参数模板参数
- 取消专门化C++模板参数
- 模板函数,其中一个参数需要专门化,而另一个不需要
- 如何为特定数量的模板参数专门化可变参数模板结构
- 使用非类型模板参数进行专门化模板模板参数
- g++和clang++在结构/类专门化中具有非类型参数的不同行为
- 我如何避免使用依赖于参数的查找明确专门化模板化功能
- 专门化采用通用引用参数的函数模板
- 如果需要参数包,则使用SFINAE专门化类
- c++多参数模板化的类成员专门化
- C++11`using`关键字:专门化模板参数的模板别名
- 如何在没有参数的情况下专门化模板类
- 我可以用非模板类专门化一个可变模板模板模板参数吗
- 如何在C++中专门化 std::vector 的模板模板参数
- 按参数C++类型专门化重载构造函数
- 将“类型参数”与“非类型参数”(或相反)专门化
- 如何在非模板化类中专门化没有参数的模板化方法
- 在 C++ 中鸭子键入(通过其非类型模板参数的值专门化模板函数)
- 使用已推导的模板参数专门化模板成员函数