- Существует класс, использующий разные обратные вызовы с разными наборами данных и желающий дать им разные «имена» для регистрации.
Y kind of evaluation: [starts_with, hash, ends_with, ...etc ]
- Это очень похоже на другой «тип» объекта с другим типом данных и логикой. Таким образом, использование перечисления было бы утомительным, поскольку типы данных X и оценка Y могут привести к количеству комбинаций X*Y.
Перенос простого std::string_view из конструктора в частный член кажется нормальным, но я хочу предотвратить будущие сопровождающие не будут передавать нестатические строки хранения...
Примечание: это похоже на дубликат C++: конструктор принимает только строковый литерал, но ответы были записаны в шаблоне.
Цель и предположения:
- Во время компиляции будет известно количество статических строковых литералов.
- Несколько объектов будут указывать на одни и те же статические строковые литералы, и я бы хотел избежать использования std::string.
- Избегайте std::string_view указывает на временные данные.
- < li>строковый литерал для аргумента шаблона
- Обратный вызов в качестве аргумента шаблона
Но я не хочу писать код шаблона только для регистрации имен... - Использование перечисления и поиск перечисления в журнале также будут работать. Мне надоело добавлять перечисления и перечисления обратного поиска в строки... Это будет мое окончательное решение, если других решений нет.
- Принимайте решения C++20 и выше. Даже если это написано на C++23 или C++26, по крайней мере я знаю, что это можно решить в будущем. Будем признательны, если есть решение для C++20.
- Возможно, это проблема XY. Пожалуйста, дайте мне знать, если есть другой способ решить эту проблему.
#include
#include
static constexpr std::string_view EXACT = "exact";
static constexpr std::string_view PREFIX = "prefix";
class Evaluator{
public:
Evaluator(std::string_view name) : m_name(name){}
bool evaluate(std::string_view input){
// Work for lookup per input
// ...
// Logging
std::cout
Подробнее здесь: https://stackoverflow.com/questions/790 ... compilatio