動機:我想創建一個實用工具類,以便而不必寫: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