gpt4 book ai didi

c++ - 如何在多个项目中共享一个主要功能/文件?

转载 作者:行者123 更新时间:2023-11-28 04:37:01 25 4
gpt4 key购买 nike

我有多个具有相同主文件的 C++ 应用程序。它看起来像这样:

main() {
superclass *a = new subclass_1();
a.setup(); // .setup() and .run() are superclass functions that are overridden by subclasses.
a.run();
}

我有大约 10 个子类(subclass_1、subclass_2、subclass_3 等),它们都共享相同的接口(interface)(.setup()、.run())。

我想用完全相同的主文件创建 10 个单独的二进制文件,但略有不同的是子类实例不同(而不是 new subclass_1(),它将是 new subclass_2(),new subclass_3() , ETC..)。但是对 .setup() 和 .run() 的调用将始终相同。

这背后的原因是我的主要功能可能会略有变化,我不想更新 10 个主要文件来传播此更改。我只想拥有一个主文件并以某种方式链接到 10 个不同的子类库以创建 10 个不同的可执行文件。

我正在使用 CMake 和 C++ 17,当然还有 gcc/g++。

我考虑过的策略:

a) 使用模板引擎获取主文件模板并生成 10 个临时主文件并编译它们。这不是很优雅,但我可能可以破解 CMake 来为我完成这个过程。

b) 使用 C 的动态类加载。使用 dlopen 和 dlsym,我可以从我的子类中导出符号,并有一个通用的主文件 .o 文件,我可以单独链接到每个子类库,并创建 10 个不同的二进制文件,这些二进制文件只需为每个子类加载 10 个不同的 .so 文件。这种方法更优雅一些,但可能丑陋和困惑,不幸的是,我在我的设置和运行函数中使用 C++ 和 std::strings。符号导出可能会变得困惑....

有人遇到过这样的事情吗?有什么想法吗?

最佳答案

您可以像这样使用编译器定义的 MACRO:

// main.cpp

int main() {
// macro defined by compiler command line
superclass *a = new DEFINED_SUBCLASS();
a.setup(); // .setup() and .run() are superclass functions that are overridden by subclasses.
a.run();
}

编译:

g++ -DDEFINED_SUBCLASS=subclass_1 -std=c++11 -o main-1 main.cpp
g++ -DDEFINED_SUBCLASS=subclass_2 -std=c++11 -o main-2 main.cpp
... etc ...

关于c++ - 如何在多个项目中共享一个主要功能/文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51128719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com