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>()
};