我有一个问题。我正在尝试将 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*
的全部含义,是有时在这些情况下使用它,当你不知道你会收到什么时,然后将其转换为你需要的特定用法。
谢谢!
你不能。
您可以将数据指针转换为
void*
,然后返回到您开始使用的相同指针类型。 std::function
不是指针类型,因此强制转换在静态上是无效的,并且它与您开始时的情况不同。您从 .target
类型的 void(*)()
开始,但它不是数据指针,而是函数指针,因此将其转换为 void*
并返回是实现定义的。
您可以:
void(*)()
。将适用于大多数(但不是全部)平台。void(*)()
而不是 void*
作为通用函数指针(您可以将其转换为其他函数类型)。如果您还没有尝试过,C++ 允许使用 std::any 代替传统的 void 指针,并且它具有我们在 std::unique_ptr 中看到的许多功能: https://en.cppreference.com/w/cpp/utility/any
希望这能满足您的需要。