将void *转换为std :: function

时间:2017-02-19 15:06:45

标签: c++11 casting void-pointers std-function

我有一个问题。我正在尝试将void *转换为std :: function。 这只是一个简单的例子,任何建议都将受到赞赏

#.h file
class Example {

public:

  Example();
  int foo(void* hi);

  int fooFunc(std::function<int(int, int)> const& arg, int x, int y) {
    foo(arg.target<void*>(), x, y);
    return 2;
  }

};


#.cpp file
Example::Example() {

  }

  int Example::foo(void * func, int x, int y)
  {
    //cast back to std::function
    func(x, y);
    std::cout << "running in foo: " << a << "\n";
    return a;
  }

我试过的每一个演员都没有用。

我知道我可以在这个例子中发送一个std::function,但这是为了更大的东西,我正在研究一个例子,让它在这里工作。

void*的全部含义,在某些情况下,当您不知道自己将收到什么,然后将其转换为您需要的特定用途时,有时会使用它。

谢谢!

1 个答案:

答案 0 :(得分:2)

你不能。

您可以将数据指针强制转换为void*,然后返回到您已启动的同一指针类型。 std::function不是指针类型,因此强制转换是静态无效的,并且它与您开始使用的不同。您已经开始使用类型.target的{​​{1}},但它不是数据指针,它是一个函数指针,因此将其强制转换为void(*)()并返回实现 - 定义

你可以:

  1. 无论如何,请忽略此问题并转发给void*。将适用于大多数(但不是所有)平台。
  2. 使用void(*)()代替void(*)()作为通用函数指针(yoy可以将其转换为其他函数类型)。
  3. 使用C ++提供的任何工具来完全避免使用。