动机:我想创建一个实用工具类,以便而不必写:C++模板类型推演问题
if(someVal == val1 || someVal == val2 || someVal == val3)
我可以代替写:
if(is(someVal).in(val1, val2, val3))
这是更接近数学的'a是(b,c,d)'的一个元素,并且当变量名'someVal'很长时也可以节省大量的输入。
这里是我迄今为止(2倍3的值)的代码:
template<class T>
class is {
private:
T t_;
public:
is(T t) : t_(t) { }
bool in(const T& v1, const T& v2) {
return t_ == v1 || t_ == v2;
}
bool in(const T& v1, const T& v2, const T& v3) {
return t_ == v1 || t_ == v2 || t_ == v3;
}
};
但是它无法对其进行编译,如果我写:
is(1).in(3,4,5);
代替我必须写
is<int>(1).in(3,4,5);
这并不算太坏,但如果编译器能够发现类型为会更好无需我明确指定它。
有没有办法做到这一点或我坚持明确指定它?
典型的方法是编写提供功能的类,然后编写一个函数来创建实例该类自函数支持类型推导。 – 2010-04-06 09:35:09