我搜索一些提示,其中我可以为模板参数设置多种类型,例如:
那是我的班级:
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>);
答案 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
将从您传递的参数中推断出来。