我有一个问题,让我对我必须做的事感到困惑。问题如下:
Modify_If的原型如下:
template <class C, class Tester, class Transform>
void Modify_If(C & a, Tester f, Transform g)
我必须编写Modify_If函数,但我不知道从哪里开始,所以如果有人可以帮助我,我会很感激。
答案 0 :(得分:5)
template <class C, class Tester, class Transform>
void Modify_If(C& a, Tester f1, Transform f2) {
if (f1(a)) // Apply f1 to a - Check whether result is true
a = f2(a); // Transform with f2; save
}
答案 1 :(得分:1)
从描述中可以看出,如果g(a)
返回true,那么你应该做的就是执行f(a)
。这看起来像这样:
if(f(a)) {
g(a);
}
答案 2 :(得分:1)
在两个仿函数Tester
和Transform
中,您所要做的就是为每个仿函数创建一个类,并重载()
运算符。然后将仿函数的主体写成函数。这是一个简单的仿函数骨架:
class Functor
{
public:
template <class Type>
void operator()(Type& value) // it doesn't have to be void.
{
// functor body, as if it were a function.
}
};
然后,您可以将仿函数作为参数传递,方法是创建它的对象,或者通过动态创建它来轻松传递:
template <class Func>
void fun(Func f); // a function hat accepts a functor.
Functor f;
fun(f);
fun(Functor()); // creating the functor on the fly.
答案 3 :(得分:1)
函数原型可能如下所示:
template<class ForwardIterator, class Predicate, class Type>
void transform_if(
ForwardIterator First,
ForwardIterator Last,
Predicate Pred,
UnaryFunction Func
);
在其实现中,您应该遍历所有元素集并将Func
应用于将为Pred(*element_iterator)
返回true的所有元素。