【发布时间】:2020-05-28 22:41:49
【问题描述】:
我正在尝试编写标题中描述的函数。 我制作了一个名为 queue 的模板自定义动态数组,如果满足参数传递的谓词,我需要创建一个函数来检查该队列的每个元素;如果是,我需要将运算符应用于该元素也通过参数传递。
首先我可能需要一个解释..谓词应该是一元的,所以它可能是“isdigit”或“isalpha”之类的东西,对吧?作为运算符,它可能是一个简单的后增量++。 主要问题是我真的不知道如何将运算符和谓词作为函数中的参数传递。
如果我理解了这个请求,这里我尝试做的但当然没有工作......有人帮忙吗?
template<typename L, typename OPERATOR>
void change_if(queue<L> &que, bool (*f)(L), OPERATOR op) {
for(int i=0; i<que._size-1; i++) {
if ((*f)(que._queue[i]))
que._queue[i] = op(que._queue[i]);
}
}
int main(){
//as constructor, 3 is referred to size of the queue and 99 to the values.
queue<int> q(3, 99);
change_if(q, isdigit, ++);
}
【问题讨论】:
-
什么不起作用?程序是否编译?它会给出错误的输出吗?此外,如果您不确定如何将谓词和运算符传递给函数,请尝试使用普通数组或
vector,然后再尝试自定义数组。 -
作为示例运算符,您给出后增量 ++,但后增量运算符在此处不会产生预期效果
que._queue[i] = op(que._queue[i]); -
您不能在任何地方传递运算符,您需要将它们包装在某种可调用对象中。
标签: c++ function c++11 templates predicate