我想将我的print functor的第一个参数绑定到0:
#include<iostream>
#include<functional>
using namespace std;
class Print : public std::binary_function<int,int,void>{
public:
void operator()(int val1, int val2)
{
cout << val1 + val2 << endl;
}
};
int main()
{
Print print;
binder1st(print,0) f; //this is line 16
f(3); //should print 3
}
上面的程序(基于C++ Primer Plus的示例)无法编译:
line16 : error : missing template arguments before ‘(’ token
有什么问题?
我不想使用C ++ 11,也不想提升功能。
已编辑:为简单起见,operator()返回类型已从bool更改为void
答案 0 :(得分:5)
正如错误消息所示,您在(
之前缺少模板参数
这就是你想要的
std::binder1st<Print> f(print, 0);
但是,您还需要将operator()
const设为如下
bool operator()(int val1, int val2) const
最后,这个函数需要返回一些东西。
答案 1 :(得分:2)
binder1st
需要模板参数,请尝试
binder1st<Print> f(print, 0);
请在此处查看reference。
实施例
#include <iostream>
#include <functional>
#include <algorithm>
using namespace std;
int main () {
binder1st < equal_to<int> > equal_to_10 (equal_to<int>(),10);
int numbers[] = {10,20,30,40,50,10};
int cx;
cx = count_if (numbers,numbers+6,equal_to_10);
cout << "There are " << cx << " elements equal to 10.\n";
return 0;
}
答案 2 :(得分:2)
std::binder1st
是一个类模板,因此需要一个模板参数。
binder1st<Print> f(print,0);
// ^^^^^^^
但是如果你真的想要绑定第二个参数,那么你需要使用恰当命名的std::binder2nd
。