Как получить доступ к строке constexpr, которая определена в структуре? - PullRequest
0 голосов
/ 03 мая 2020

Как правильно получить доступ к строке "пока" из структуры?

#include <iostream>
static constexpr char hi[] = "hi";
struct S{ static constexpr char bye[] = "bye"; };

int main(int argc, char *argv[]) {
  typedef struct S ST;

  std::cout << hi << std::endl;              // this prints "hi" 
  std::cout << sizeof(ST::bye) << std::endl; // this correctly prints 4
  std::cout << ST::bye << std::endl;         // this does not compile with "undefined reference"
}

Я работаю с фреймворком c ++, который имеет некоторую конфигурацию в этом формате (даже в структурах с множественными вложениями), чтобы сделать его значения доступными во время компиляции. Я недостаточно глубоко разбираюсь в C ++, чтобы вспомнить основную проблему здесь. Также я не могу спорить о том, почему был выбран этот подход к реализации конфигурации, и не могу его изменить.

1 Ответ

0 голосов
/ 03 мая 2020

Это можно сделать с помощью переопределения stati c constexpr вне структуры:

#include <iostream>
static constexpr char hi[] = "hi";
struct S{ static constexpr char bye[] = "bye"; };

constexpr char S::bye[]; // <<< this line was missing

int main(int argc, char *argv[]) {
  typedef struct S ST;

  std::cout << hi << std::endl;              // this prints "hi" 
  std::cout << sizeof(ST::bye) << std::endl; // this correctly prints 4
  std::cout << ST::bye << std::endl;         // Now this prints "bye"
}

или путем компиляции с использованием c ++ 17, что делает это устаревшим.

Ссылки по теме:

...