[英]Is it safe to reinterpret_cast from std::function<void()> * to std::function<std::monostate()> *?
[英]reinterpret_cast std::function* to and from void*
当我从主可执行文件中调用std :: function时,通过将其地址转换为/从void*
,我在插件中遇到段错误。 我可以在几个自包含的行中重现这个问题:
#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;
}
即使我正在使用原始类型,它仍然是segfaulting。 谁能看到我哪里出错了?
你的问题的原因与强制转换无关,这是因为函数返回一个const string &
。 你需要:
using func_t = std::function<const std::string ()>;
正如评论所示, const
在这里毫无用处,只是:
using func_t = std::function<std::string ()>;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.