Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::binary_函数-调用不匹配? 包括 #包括 使用名称空间std; int main(){ 二进制函数运算[]={ 加()、减()、乘()、除()) }; 双a,b; 智力选择; cout a>>b; 不能选择; cout_C++_Stl - Fatal编程技术网

C++ std::binary_函数-调用不匹配? 包括 #包括 使用名称空间std; int main(){ 二进制函数运算[]={ 加()、减()、乘()、除()) }; 双a,b; 智力选择; cout a>>b; 不能选择; cout

C++ std::binary_函数-调用不匹配? 包括 #包括 使用名称空间std; int main(){ 二进制函数运算[]={ 加()、减()、乘()、除()) }; 双a,b; 智力选择; cout a>>b; 不能选择; cout,c++,stl,C++,Stl,std::binary_函数只包含参数和返回类型的typedef。它从来没有打算用作多态基类(即使是这样,也会有切片问题) 另一种方法是,您可以像这样使用boost::function(或std::tr1::function): boost::function<double(double, double)> operations[] = { plus<double>(), minus<double>(), multiplies<double>(

std::binary_函数
只包含参数和返回类型的typedef。它从来没有打算用作多态基类(即使是这样,也会有切片问题)

另一种方法是,您可以像这样使用
boost::function
(或
std::tr1::function
):

boost::function<double(double, double)> operations[] = {
  plus<double>(), minus<double>(), multiplies<double>(), divides<double>() 
};
boost::函数操作[]={
加()、减()、乘()、除())
};

为什么编译器不在
main()
的第一行标记错误?如果允许该数组定义,那么对存储在数组中的函数的调用也应该标记错误。那么为什么会出现错误?它只执行您要求它执行的操作。
二进制函数
(或标准库中任何其他类型的函数)不应受到编译器的特殊处理。由于
plus
…确实继承自
二进制函数
,赋值正确,您将得到切片。编译器无法将最后一行编译为
双运算符()(双,双)
不是在
二进制函数中定义的,就像通过基调用派生类中添加的任何方法都会失败一样…@David:好的,我现在明白了。谢谢。把它作为答案发布,我会接受的。只要接受这个。它是完整的,如果需要更多细节,人们可以阅读注释(你也可以“向上投票”让他们更显眼)@David:好的,很好。再次感谢你。
Calcy.cpp: In function ‘int main()’:
Calcy.cpp:17: error: no match for call to ‘(std::binary_function<double, double, double>) (double&, double&)’
boost::function<double(double, double)> operations[] = {
  plus<double>(), minus<double>(), multiplies<double>(), divides<double>() 
};