gpt4 book ai didi

C++ : How to make a specific binary (executable) for each trait?

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:28 24 4
gpt4 key购买 nike

我正在从事一个有很多特征类型的项目。如果我在同一个代码库中编译每个特征,发布的二进制文件将非常大。

我正在考虑使用宏为每个特定特征构建一个二进制文件——从业务逻辑的角度来看,这非常有意义。

但是,我意识到,如果我想减少代码库,我需要在每个模板 cpp 文件的末尾都有这么长的 if/elif 堆。这听起来像是一件非常乏味的事情。

我想知道您以前是否遇到过此类问题,这里最巧妙的解决方案是什么?

#include "MyTraits.hpp"
#include "Runner.hpp"
int main(){
#if defined USE_TRAIT_1
Runner<Trait1> a;
#elif defined USE_TRAIT_2
Runner<Trait2> a;
#elif defined USE_TRAIT_3
Runner<Trait3> a;
#endif
return 0;
}

最佳答案

如果你想在特定的编译单元中显式实例化模板,你应该使用 extern template 关键字。

// Runner.hpp
//define your template class
template <class runner_trait>
class Runner {
...
};

//This tells the compiler to not instanciate the template,
// if it is encounterd, but link to it from a compilation unit.
// If it is not found, you will get a linker errer.
extern template Runner<Trait1>;
extern template Runner<Trait2>;
extern template Runner<Trait3>;

Runner_trait1.cpp

// the template class keyword tell the compiler to instanciate the template in this compilation unit.
template class Runner<Trait1>;

// The files for Runner_trait2.cpp and Runner_trait3.cpp look identical,
// except for the trait after Runner

关于C++ : How to make a specific binary (executable) for each trait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45447650/

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