Преамбула: Я просмотрел constexpr initializing static member using static function, но (спасибо ответу Олега Богданова) Я не пытаюсь инициализировать статику.компиляция времени вычисления функции для вычисления константы
Я хотел бы знать, как сделать следующую работу:
typedef uint32_t color_t; // represent color as 00rrggbb
class Color {
static color_t makeColor(const uint8_t r,
const uint8_t g,
const uint8_t b) {
return (((color_t)r << 16) | ((color_t)g << 8) | (color_t)b);
}
static const color_t kRed = makeColor(255, 0, 0);
}
Как я понимаю, компилятор должен быть сказано, что он может оценить makeColor()
во время компиляции, так что я думаю, что это работа для constexpr
. Несмотря на все мои усилия на окропление вокруг constexpr
и const
, я все еще получаю
error: field initializer is not constant
Что мне не хватает?
P.S .: Я могу, конечно, сделать то, что я хочу с #define:
#define makeColor(r, g, b) (((color_t)(r) << 16) | ((color_t)(g) << 8) | (color_t)(b))
... но, кажется, так 20-го века!
Perfect - спасибо. (И спасибо также за указатель на https://godbolt.org) –
Рад помочь. Проект Matt Godbolt - это, наверное, лучшая вещь, которая произошла с сообществом C++ за последние годы :) –