Я разрабатываю структуру C ++ 17, которая имеет дополнительные сторонние зависимости, и я хотел бы построить std :: array , которая содержит имена доступных зависимостей. Довольно просто: < /p>
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
};
< /code>
Но есть две проблемы: < /p>
Если зависимость нет (которая может произойти), компилятор не может вывести шаблон аргументов std :: ray < /code> (массив пуст). COMP.template
constexpr std::array make_literal_array(Literals&&... literals) {
return {literals...};
}
< /code>
Но это не поддерживает запятые в сцеплении. Я попробовал с помощью std :: initializer_list
(они позволяют следить за запятыми), но не смог бы заставить его работать.>
Я разрабатываю структуру C ++ 17, которая имеет дополнительные сторонние зависимости, и я хотел бы построить std :: array , которая содержит имена доступных зависимостей. Довольно просто: < /p> [code]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 }; < /code> Но есть две проблемы: < /p>
Если зависимость нет (которая может произойти), компилятор не может вывести шаблон аргументов std :: ray < /code> (массив пуст). COMP.template constexpr std::array make_literal_array(Literals&&... literals) { return {literals...}; } < /code> Но это не поддерживает запятые в сцеплении. Я попробовал с помощью std :: initializer_list [/code] (они позволяют следить за запятыми), но не смог бы заставить его работать.>