使用结构

时间:2015-10-28 02:00:51

标签: c++ function pointers parameterization

以下代码无法编译。函数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'

1 个答案:

答案 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);
}