配置非类型模板参数的便捷方法

时间:2016-03-28 06:26:27

标签: c++ templates configuration c-preprocessor

我正在编写一个非常依赖模板的通用框架。外部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的原因。

此方案的一个关键属性是,如果SomeStructMY_TYPE中未重新定义config_symbols.h的情况下实例化,则用户将收到编译时错误。

我正在寻找一种方法将此方案扩展到非类型模板参数:

template <bool flag = MY_VALUE>
struct SomeStruct {...};

问题是上面提到的关键属性没有保留。也就是说,MY_VALUE需要在all_symbols.h中定义为falsetrue,以便用户在实例化{{1}时不会收到编译时错误},但无法在配置中指定SomeStruct

我可以通过用 type 替换非类型模板参数来解决这个问题,但这有点人为。还有另一种解决方法吗?

0 个答案:

没有答案