Удобный способ настройки нестандартных параметров шаблона
Я пишу общую структуру, которая в значительной степени опирается на шаблоны. Внешний скрипт 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
, так что пользователь не получит ошибку во время компиляции, если он будет создан SomeStruct
, но не может указать MY_VALUE
в конфигурации.
Я мог бы обойти эту проблему, заменив нетипичные параметры шаблона типовыми, но это искусственно. Есть ли другой обходной путь?