reinterpret_cast std::function* 往返void*
reinterpret_cast std::function* to and from void*
当我通过转换它的地址 to/from void*
调用从主要可执行文件传递的 std::function 时,我在插件中遇到段错误。我可以在几行独立的行中重现该问题:
#include <iostream>
#include <functional>
int main()
{
using func_t = std::function<const std::string& ()>;
auto hn_getter = func_t{[]() {
return "Hello";
}};
auto ptr = reinterpret_cast<void*>(&hn_getter);
auto getter = reinterpret_cast<func_t*>(ptr);
std::cout << (*getter)() << std::endl; // Bang!
return EXIT_SUCCESS;
}
即使我正在转换为原始类型,它仍然会出现段错误。谁能看出我哪里出错了?
你的问题的原因与转换无关,这是因为函数 return a const string &
。您需要:
using func_t = std::function<const std::string ()>;
正如评论所说,const
这里没用,只是:
using func_t = std::function<std::string ()>;
当我通过转换它的地址 to/from void*
调用从主要可执行文件传递的 std::function 时,我在插件中遇到段错误。我可以在几行独立的行中重现该问题:
#include <iostream>
#include <functional>
int main()
{
using func_t = std::function<const std::string& ()>;
auto hn_getter = func_t{[]() {
return "Hello";
}};
auto ptr = reinterpret_cast<void*>(&hn_getter);
auto getter = reinterpret_cast<func_t*>(ptr);
std::cout << (*getter)() << std::endl; // Bang!
return EXIT_SUCCESS;
}
即使我正在转换为原始类型,它仍然会出现段错误。谁能看出我哪里出错了?
你的问题的原因与转换无关,这是因为函数 return a const string &
。您需要:
using func_t = std::function<const std::string ()>;
正如评论所说,const
这里没用,只是:
using func_t = std::function<std::string ()>;