我对模板有一个好奇的问题,我试图在 模板类和“float/double/int”类型之间做一个基本加法运算。这是非常基本的,但如果我这样做:运算符+和浮点型参数
template<class T>
class toto{
T a;
};
template<class T>
toto<T> operator+(toto<T> const&, T&){
std::cout << "hello " <<std::endl;
}
int main(){
toto<float> t;
toto<float> d = t +2.3;
}
它不会编译,因为2.3被认为是双倍,它不符合签名。我可以为我的运营商使用第二个模板参数
template<class T, class D>
toto<T> operator+(toto<T> const&, D&){
std::cout << "hello " <<std::endl;
}
它编译,正确执行但过于危险D可以是一切。另一种方法是使用float,double或int(O_O)创建不同的签名。升压:: enable_if看来我的解决方案,但在我的文档阅读:
template <class T>
T foo(T t,typename enable_if<boost::is_arithmetic<T> >::type* dummy = 0);
应用此方法来操作*行得不行的,因为编译器会抱怨默认参数是被禁止的。
有什么建议吗?
干杯,
++吨
'TOTO d = T + 2.3f;' –
NaCl
2014-11-02 23:15:24
谢谢你,我已经测试它,它的工作原理很不幸,这“代码”是一个非常大的抽象。如果我必须改变我所有的2.3 - > 2.3f,这将需要永远,我有数千行检查/更改。到现在为止,我拥有double/float和int的签名,它可以工作,但不够高雅。 – 2014-11-03 08:12:17
正则表达式如何? – NaCl 2014-11-03 14:19:44