【发布时间】:2022-08-12 23:44:37
【问题描述】:
我试图通过删除仅在+= 和-= 中不同的冗余代码来简化一段代码。我的想法是改用std::plus 和std::minus,从而将这两种方法合二为一。
最少的代码是:
#include <functional>
int main()
{
// true is actually some condition
std::binary_function<long, long, long> direction = true ? std::plus<long>() : std::minus<long>();
}
错误是
错误 C2446: \':\': 没有从 \'std::minus\' 到 \'std::plus\' 的转换
我不想将 std::minus 转换为 std::plus,我想将所有内容都转换为 std::binary_function。
我试图帮助编译器使用静态转换
std::binary_function<long, long, long> direction = true ? static_cast<std::binary_function<long, long, long>>(std::plus<long>()) : std::minus<long>();这给了我
错误 C2440:\'static_cast\':无法从 \'std::plus\' 转换为 \'std::binary_function<long,long,long>\'
长问题短:如何在单个对象中使用 std::plus 和 std::minus ?
在 Visual Studio 中使用 C++14,但也对较新的 C++ 版本中的解决方案开放。