Установите переменную constexpr с помощью функции не-constexpr (но возможно вычислить во время компиляции)

header.h

extern constexpr double sqrt_of_2;
extern constexpr double sqrt_of_1_2;
double sqrt(double x);

main.cpp

#include <header.h>

int main() {
int n;
scanf("%d", &n);
printf("%lf %lf\n", sqrt_of_2, sqrt(n));
return 0;
}

source.cpp

#include <header.h>

double sqrt(double x) {
// complex bits of math
// huge function
// must not be in header for speedy compilation
// will call other small non-constexpr functions in this file
}

constexpr double sqrt_of_2 = sqrt(2.0);
constexpr double sqrt_of_1_2 = sqrt(0.5)

Это, очевидно, не работает.

Я не могу добавить constexpr за sqrtв source.cpp, потому что это не будет совпадать с объявлением в header.h. Я тоже не могу добавить constexpr за sqrt в header.h потому что constexpr подразумевает inlineЗатем мне нужно будет перенести все данные из source.cpp в header.h.

Это вообще возможно?

1

Решение

Нет, вот и весь смысл constexpr был создан — для создания функций для инкапсуляции функций времени компиляции.

Нет смысла компилировать единицу кода без вычислений во время компиляции.

Объектные файлы предназначены для простого подключения для разрешения зависимостей времени соединения. Вычисления во время компиляции должны быть определены во время компиляции и, следовательно, должны иметь реализацию в модуле времени компиляции.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector