我正在编写一个非常依赖模板的通用框架。外部python脚本读取配置文件,并根据配置使用预处理器符号编译框架。
假设代码:
#include "all_symbols.h" // has a default for MY_TYPE
#include "config_symbols.h" // may or may not re-define MY_TYPE
template <typename T = MY_TYPE>
struct SomeStruct {...};
标题all_symbols.h
如下所示:
struct None {};
#define MY_TYPE None
... // set to None all the other symbols
脚本创建标头config_symbols.h
,以根据配置文件重新定义符号。此标头可能只定义了一些符号,这就是需要all_symbols.h
的原因。
此方案的一个关键属性是,如果SomeStruct
在MY_TYPE
中未重新定义config_symbols.h
的情况下实例化,则用户将收到编译时错误。
我正在寻找一种方法将此方案扩展到非类型模板参数:
template <bool flag = MY_VALUE>
struct SomeStruct {...};
问题是上面提到的关键属性没有保留。也就是说,MY_VALUE
需要在all_symbols.h
中定义为false
或true
,以便用户在实例化{{1}时不会收到编译时错误},但无法在配置中指定SomeStruct
。
我可以通过用 type 替换非类型模板参数来解决这个问题,但这有点人为。还有另一种解决方法吗?