【问题标题】:Invoke code without an entry point调用没有入口点的代码
【发布时间】:2014-07-22 17:30:18
【问题描述】:

在 C++ 中,我希望能够在不加载动态库的情况下模拟“插件”。我找到了一种将静态库中的函数连接到我的可执行文件而不引用它的方法,但我不确定这是正确的。

因为全局符号是在翻译单元主函数之前初始化的,所以我可能会这样写:

int _ = []()
{
    std::cout << "hook" << std::endl;
    return 0;
} ();

lambda + IIFE 模式 + safe initialisation 的组合有效,但由于我从未遇到过这种技术,我担心未定义的行为或编译器特定的细节。有什么更好的吗?

【问题讨论】:

    标签: c++11 lambda static-initialization


    【解决方案1】:

    您展示的是合法的 C++。通常,全局变量的初始化可用于在 main() 之外运行代码。有一些警告,即“static initialization order fiasco”——如您提供的链接中所述。

    你没有看到它,因为它不受欢迎。您正在使用全局变量在 main() 之外运行代码。许多这样的尝试都以失败告终。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多