随着偏特:
// primary
template<typename X, typename Bool>
struct Foo;
template<typename X>
struct Foo<X, std::true_type> {};
template<typename X>
struct Foo<X, std::false_type> {};
// use
Foo<X, std::true_type> x;
我用一个类型包装器bool
,但你也可以做到这一点与 非类型模板参数:
// primary
template<typename, bool>
struct Foo;
template<typename X>
struct Foo<X, true> {};
template<typename X>
struct Foo<X, false> {};
// use
Foo<X, true> x;
有时候,你可以计算用于部分专业化的值 使用默认参数中的元编程:
// primary
template<typename X, typename is_integral_ = std::is_integral<X>::type>
struct Foo;
这使得配置变量可以被用户选择覆盖。
struct my {};
Foo<my, std::true_type> x;
为了防止这种情况,调度通过继承:
// primary, where Foo_impl is any of the above
template<typename X>
struct Foo : public Foo_impl<X> {};
来源
2012-11-22 14:59:03
pmr
太棒了!这回答了我的问题。谢谢。你为什么使用这个包装? – Cartesius00
请注意,第一个版本不适用于'Foo>'。我不知道这是否可取。 –
@ R.MartinhoFernandes你的意思是第二个版本,对吧? – pmr