以下代码无法编译。函数foo
将函数指针f
作为参数,f
严格地将一个int作为参数并返回一个int。在此示例中,foo
始终使用参数f
调用3
。我想将一个函数传递给foo
,以便在评估f(3)
时,将其与其他参数一起进行评估;但是,我无法将带有2个整数的函数作为foo
的参数传递(这个问题类似于真正的问题)。
#include <iostream>
void foo(int(*f)(int))
{
std::cout << f(3) << std::endl;
}
struct plusX
{
plusX(int x_) : x(x_) {}
int x;
int plus(int y)
{
return x + y;
}
};
int main()
{
plusX px4(4);
foo(&px4.plus); // ERROR!
}
ISO C ++禁止将绑定成员函数的地址形成 指向成员函数的指针。说'&amp; plusX :: plus'
答案 0 :(得分:0)
两种解决方案。如果现有代码使用函数,第一个解决方案不需要重构代码。
1)使用仿函数:
<div data-sly-use.nav="navigation.js">${nav.foo}</div>
<section data-sly-include="path/to/template.html"></section>
<template data-sly-template.one>blah</template>
<div data-sly-call="${one}"></div>
2)使用std :: function和std :: bind
#include <iostream>
template<typename F>
void foo(F&& f)
{
std::cout << f(3) << std::endl;
}
struct my_functor
{
my_functor(int x_) : x(x_) {}
int operator()(int y)
{
return x + y;
}
int x;
};
int main()
{
my_functor f(4);
foo(f);
}