【发布时间】:2012-06-01 02:58:59
【问题描述】:
在 C++ 中,如果我有一个模板参数,我怎样才能干净地专门化一个默认参数?例如,考虑以下情况:
template <class Key, class Value = int > class Association;
如果我希望 Value 改为默认为 float 类 Special 怎么办?有没有一种方法可以有效地专门化 Association 类,如果 Key 是 Special,那么 Value 默认是 float?
我想一种方法是使用特征:
template <class Key> struct Traits {
typedef int defaultValue;
}
template<> struct Traits<Special> {
typedef float defaultValue;
}
template <class Key, class Value = Traits<Key>::defaultValue> class Association;
有没有更简洁的方法来做这件事,不那么复杂,并且更容易表明 int 是定义 Association 的地方的正常默认值?
【问题讨论】:
-
我相信应该有一种方法可以通过模板别名 (
using) 实现您想要的,但我没有时间弄清楚
标签: c++ templates template-specialization traits