Принимать только string_view, указывающий на статические строковые литералы хранения во время компиляции без шаблона.C++

Программы на C++. Форум разработчиков
Anonymous
 Принимать только string_view, указывающий на статические строковые литералы хранения во время компиляции без шаблона.

Сообщение Anonymous »

Контекст
  • Существует класс, использующий разные обратные вызовы с разными наборами данных и желающий дать им разные «имена» для регистрации.
X kind of Data: [email address, geo address, user name]
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

Вернуться в «C++»