繁体   English   中英

reinterpret_cast std :: function *来往于void *

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM