C ++ частные статические переменные-члены constexpr - PullRequest
0 голосов
/ 23 мая 2019

Вот мне и интересно, учитывая простой класс:

//Foo.h
class Foo {
private:
    static constexpr int bar = 0;

public:
    int do_something();
};

//Foo.cpp
int Foo::do_something() {
    return 5 + bar;
}

Было бы разумно полностью удалить bar из заголовка как его частное статическое значение constexpr, которое никогда не использовалось в заголовочном файле?

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

Есть ли причины не делать этого?

Редактировать: Для пояснения, эти переменные могут использоваться в одной или нескольких функциях, один или несколько раз, и НИКОГДА в заголовочном файле.

В моем случае использования эти переменные являются постоянными пределами / vecs, например:

static constexpr float rotLimitVertical = to_rad(90.0f);
static constexpr float rotLimitHorizontal = to_rad(360.0f);

static const glm::vec3 right    = {1, 0, 0};
static const glm::vec3 up       = {0, 1, 0};
static const glm::vec3 forward  = {0, 0, 1};

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

1 Ответ

2 голосов
/ 23 мая 2019

Есть ли причины не делать этого?

Я думаю, что лучше переместить его в файл .cpp. Вы можете сделать это:

  1. Переменная объема файла static, или
  2. Переменная в анонимном пространстве имен в файле .cpp или
  3. Переменная в пространстве имен, относящаяся к файлу .cpp.

Вариант 1

static constexpr int bar = 0;

Вариант 2

namespace
{
   constexpr int bar = 0;
}

Вариант 3

namespace MyFile_Namespace
{
   constexpr int bar = 0;
}
...