Строковые литералы просмотра в заголовочном файле - PullRequest
0 голосов
/ 27 июня 2018

У меня есть класс, который содержит несколько константных строк в виде:

using namespace std::string_view_literals;
class T {
  static const constexpr std::string_view something1 = "Alice"sv;
  static const constexpr std::string_view something2 = "Bob"sv;
  static const constexpr std::string_view something3 = "Charlie"sv;

  ...
};

Я в настоящее время using пространство имен string_view_literals, но это не очень хорошая практика в заголовочном файле, и генерирует предупреждения:

Using namespace directive in global context in header [-Wheader-hygiene] (лязг)

literal operator suffixes not preceded by '_' are reserved for future standardization [-Wliteral-suffix] (gcc7)

Я бы хотел посмотреть другие варианты.

  1. Игнорировать предупреждения
  2. Прямой импорт одного используемого мной литерала вместо всего пространства имен

    using std::string_view_literals::operator""sv

  3. Поскольку это константа constexpr, возможно, мне следует просто вызвать конструктор напрямую, зная, что у него нет памяти во время выполнения или загрузки ЦП:

    static const constexpr something1 = std::string_view("Alice");

  4. Что-то еще?

1 Ответ

0 голосов
/ 27 июня 2018

Это довольно мало и ничего не загрязняет:

class T {
    using sv = std::string_view;
    static constexpr auto something1 = sv("Alice");
    static constexpr auto something2 = sv("Bob");
    static constexpr auto something3 = sv("Charlie");
};

Если вы действительно хотите использовать литерал, вы можете обернуть свой класс в другое, не предназначенное для имени namespace, а затем вернуть его во внешнее пространство имен:

namespace _private {
    using namespace std::string_view_literals;

    class T {
        static constexpr auto something1 = "Alice"sv;
        static constexpr auto something2 = "Bob"sv;
        static constexpr auto something3 = "Charlie"sv;
    };
}

using _private::T;
<ч />

Обратите внимание, что запись static constexpr const является избыточной. constexpr переменные неявно const.

...