几种类型的模板参数

时间:2015-05-27 14:01:00

标签: c++

我搜索一些提示,其中我可以为模板参数设置多种类型,例如:

那是我的班级:

template <class T, class U = unsigned char>
class Value
{
    private:
          T value;
          U mask;
    public:
          Value(T inValue, U inMask) : value(inValue), size(inMask){};
          // ...
};

这是我的职能:

void process(Value<int, ..>); // process(Value<int, {unsigned char, unsigned short}>)
void process(Value<float, ...>);

我希望这个例子有效:

int main()
{
  Value<int> vl1(16, 0x80); 
  Value<int, unsigned short> vl2(16, 0x8000);
  Value<float> vl3(0.85, 0x80);

  process(vl1); // call process(Value<int, ...>)
  process(vl2); // Call process(Value<int, ...>)
  process(vl3); // Call process<Value<float>)
}

并且避免模拟我的过程函数,例如:

template<class U> void process(Value<int, U>);
template<class U> void process(Value<float, U>);

2 个答案:

答案 0 :(得分:2)

您无需为process功能提供默认值

template<class U> void process(Value<int, U>);
template<class U> void process(Value<float, U>);

就够了。

答案 1 :(得分:1)

您不能让非模板函数接受不相关的类型,这就是模板的用途。

你可以做的是让你的模板函数声明更短一些:

template<class U> void process(Value<int, U>);
template<class U> void process(Value<float, U>);

默认参数不是必需的,因为U将从您传递的参数中推断出来。