从unary_function继承的谓词函子,这不是一个接受 1 个参数的函数
Predicate functor inheriting from unary_function, that isn't a function taking 1 argument
我有一个从unary_function继承的函子类:
template<class T>
class Matcher : public std::unary_function<T, bool>
{
private:
int m_match;
public:
Matcher(int valToMatch) : m_match(valToMatch) { };
bool operator() (T toTest)
{
return T.prop == m_match;
}
}
使用下列内容之一的函数:
void DoStuff(std::unary_function<ThisType, bool> & pred,
vector<ThisType> & stuffToTest)
{
for(vector<ThisType>::iterator it = stuffToTest.begin();
it != stuffToTest.end(); ++it)
{
if(pred(*it)) // <<< Compiler complains here
{
// do stuff
}
}
}
原调用函数:
Matcher myMatcher<ThisType>(n);
// have vector<ThisType> myStuff
DoStuff(myMatcher, myStuff);
据我所知,我有一个模板化的函子,我正在构造一个具有ThisType类型的实例,我将其传递给期望有unary_function参数的函数,并使用ThisType的实例调用。
但是编译器抱怨"term不计算为一个有1个参数的函数"。
我错过了什么?
这是因为即使你将派生类对象传递给函数,函数参数仍然是std::unary_function
,它没有成员operator()
接受一个参数。因此出现了错误。
我建议你把你的函数改成函数模板:
template<typename F>
void DoStuff(F && pred, vector<ThisType> & stuffToTest)
{
for(auto it = stuffToTest.begin(); it != stuffToTest.end(); ++it)
{
if(pred(*it))
{
// do stuff
}
}
}
unary_function不是多态类型,它只是一个基类,用于提供argument_type
和result_type
成员类型。
你可以给你的DoStuff
函数传递一个std::function<bool(ThisType)>
或者你让你的DoStuff
函数模板
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用