Код: Выделить всё
using literal = const char*;
std::vector[*] available_dependencies() {
std::vector dependencies{};
#ifdef HAS_DEPENDENCY1
dependencies.emplace_back("dependency 1");
#endif
#ifdef HAS_DEPENDENCY2
dependencies.emplace_back("dependency 2");
#endif
return dependencies;
}
< /code>
Я хотел бы иметь время с компиляцией, константно-эквивалент этого. Я попробовал это: < /p>
constexpr static std::array available_dependencies{
#ifdef HAS_DEPENDENCY1
"dependency 1",
#endif
#ifdef HAS_DEPENDENCY2
"dependency 2"
#endif
};
Если зависимость не доступна (массив пуст), компилятор не может вывести аргументы шаблона std :: array .
Если зависимость 1, но не зависит, но кода не сочетает, потому что влевой. /> < /ol>
Мне удалось решить первую проблему с чем-то вроде: < /p>
Код: Выделить всё
template
constexpr std::array make_literal_array(Literals&&... literals) {
return {literals...};
}
< /code>
Но это не поддерживает запятые в сцеплении. Я попробовал с помощью std :: initializer_list Подробнее здесь: https://stackoverflow.com/questions/796 ... eprocessor
Мобильная версия