处理编辑头文件时的编译时间
Dealing with compilation times when editing headers
我正在做一个巨大的项目,它使用一个系统,当运行make时,生成一些头文件,其中包含一些在代码中无处不在使用的常量。由于这个项目的大小,如果这些头文件中的一个被改变(一个常量被删除或另一个被添加),几乎整个项目都必须重新编译(有时需要几个小时)。
我最初的解决方案是编写某种ConstantManager
类,该类具有每个代码值对的映射和getter,该getter返回给定代码作为字符串返回其值(非常直接),并且还更改头生成器,以便将常量定义为扩展到ConstantManager
实例的#define
s和对getter的调用。这样做的问题是它不适用于switch
语句(嗯……(实际上是case
语句),因为返回值不是常量表达式。
我的问题是:有没有其他的解决方案来解决这个问题,或者有一些技巧来让我的开关工作?
您可以将大标题拆分为较小的标题并包含它们。这可能是大量的初始工作,但这是最直接的,并且可能与您当前的解决方案兼容。
另一个选择是创建使你的ConstManager类有constexpr成员。为此,您不需要太多,但不能使用map。
ConstManager.h
namespace ConstManager {
namespace detail {
struct Constant {
char const * const name;
char const * const value;
};
Constant const * const constants;
unsigned int total_variables;
}
inline char const * const ConstManager::get(char const * needle) constexpr {
using namespace ConstManager::detail;
/* i was not able to quickly find a constexpr compatible binary search function*/
if(int i = 0; i < total_variables; ++i){
Constant & const c = constants[i];
if(strcmp(c.name, needle) == 0){
return c.value;
}
}
return nullptr;
}
}
应该生成ConstManager.c
ConstManager::detail::Constant ConstManager::detail::constants [] = {
{"first var", "first value"},
{"second var", "second value"}
};
unsigned int ConstManager::detail::total_variables = 2;
提出的第一个解决方案(这是在第一次编辑之前):
我认为你应该用常规的外部变量替换所有的定义。
- 如果这些定义用于连接字符串,它将不起作用
- 对于编译器来说,如果不是不可能的话,它可能会使内联更难,但是如果这很重要,只有一个分析器才能知道。
constmgr.h
// make all your needed constansts externs
namespace Constants {
extern int const theFirstConstant;
extern char const * const someStringConstant;
}
然后在构建时生成源文件。
constexpr.cpp
int const Constants::theFirstConstant = 1000;
char const * const Constants::someStringConstant = "hihihoho";
相关文章:
- 使用简单类型列表实现的指数编译时间.为什么
- 在已经使用Git的情况下减少编译时间
- C++常量数组的编译时间较长
- 编译时间文本到数字转换 (atoi)
- 在C++中执行 N 阶乘编译时间的 3 种不同/相同方法
- DLLexport 类模板实例(专用化),减少了仅标头模板库的编译时间
- 替换枚举以最大化编译时间检查的最佳方法
- 不同C++功能的编译时间
- 在预编译标头中实例化模板会缩短编译时间吗?
- 使用 SCons 提取每个编译单元的编译时间
- 将 lambda 函数转换为另一个编译单元中的普通函数会缩短编译时间吗?
- std :: Invoke_result_t编译时间语法错误
- 模板;constexpr;编译时间
- 如何实现声明功能-C 11,编译时间
- 如何减少编译时间:在包含未触及的头文件的情况下
- C++编译时间类型确定
- 特征:返回对具有编译时间尺寸检查的矩阵块的引用
- 在编译时间定义多个派生类
- 在编译时间创建查找表
- C 函数在编译时间返回类型