我有一个问题。我正在尝试将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*
的全部含义,在某些情况下,当您不知道自己将收到什么,然后将其转换为您需要的特定用途时,有时会使用它。
谢谢!
答案 0 :(得分:2)
你不能。
您可以将数据指针强制转换为void*
,然后返回到您已启动的同一指针类型。 std::function
不是指针类型,因此强制转换是静态无效的,并且它与您开始使用的不同。您已经开始使用类型.target
的{{1}},但它不是数据指针,它是一个函数指针,因此将其强制转换为void(*)()
并返回实现 - 定义
你可以:
void*
。将适用于大多数(但不是所有)平台。void(*)()
代替void(*)()
作为通用函数指针(yoy可以将其转换为其他函数类型)。