pepsicoca1 Asked:2020-04-19 15:01:43 +0000 UTC2020-04-19 15:01:43 +0000 UTC 2020-04-19 15:01:43 +0000 UTC C++中的函数重载和模板 772 跟进函数重载的问题: c++使用函数重载,编写程序计算两个不同类型变量的乘积 那么模板使函数重载变得不必要(在 C++ 中)?或者当模板不能替代函数重载时还有选择吗? c++ 1 个回答 Voted Best Answer MSDN.WhiteKnight 2020-04-20T19:47:10Z2020-04-20T19:47:10Z 不,模板并不总是取代函数重载。如果函数需要做不同的事情,模板根本没有帮助。例如,如何用模板替换这样一对重载函数? double CalcSum(double x, double y) { return x + y; } void CalcSum(double x, double y,double& res) { res = x + y; } 即使你这样做: template<typename... Args> double CalcSum(Args...) { return 0; } template<> double CalcSum<double,double>(double x, double y) { return x + y; } template<> double CalcSum<double, double,double&>(double x, double y, double& res) { res = x + y; return res; } 这段代码的问题(除了它看起来很糟糕)是它仍然不能正常工作。如果您只是写CalcSum(1.0, 2.0, res),则不会调用所需的专业化-您需要写CalcSum<double, double, double&>(1.0, 2.0, res);...
不,模板并不总是取代函数重载。如果函数需要做不同的事情,模板根本没有帮助。例如,如何用模板替换这样一对重载函数?
即使你这样做:
这段代码的问题(除了它看起来很糟糕)是它仍然不能正常工作。如果您只是写
CalcSum(1.0, 2.0, res),则不会调用所需的专业化-您需要写CalcSum<double, double, double&>(1.0, 2.0, res);...