Я думаю, что мой вопрос заключается в том, есть ли способ эмулировать поведение, которое мы получим от ключевого слова C++ 0x constexpr
с текущим стандартом C++ (то есть, если я понимаю, что предполагается constexpr
делать правильно).логическая функция повторного использования в выражении const
Чтобы быть более понятным, бывают моменты, когда полезно вычислить значение во время компиляции, но также полезно уметь вычислять его во время выполнения, например, если мы хотим рассчитать полномочия, мы можем использовать приведенный ниже код.
template<int X, unsigned int Y>
struct xPowerY_const {
static const int value = X*xPowerY_const<X,Y-1>::value;
};
template<int X>
struct xPowerY_const<X, 1> {
static const int value = X;
};
int xPowerY(int x, unsigned int y) {
return (y==1) ? x : x*xPowerY(x,y-1);
}
Это простой пример, но в более сложных случаях было бы полезно использовать код повторно. Даже если для производительности во время выполнения рекурсивный характер функции является субоптимальным и может быть разработан лучший алгоритм, было бы полезно проверить логику, если шаблонная версия может быть выражена в функции, поскольку я не вижу разумного метода проверки правильности метода постоянных шаблонов в широком диапазоне случаев (хотя, возможно, есть один, и я просто не вижу его, и, возможно, это другой вопрос).
Спасибо.
Редактировать забыли упомянуть, я не хочу #define
Edit2 Также выше мой код неправильно, это не имеет дела с й^0, но это не влияет на вопрос.
Причина, по которой функции 'constexpr' были добавлены в язык, является именно тем, чтобы сделать это возможным. –
@Pavel, да, это имеет смысл - подумал, что, когда я отправлял сообщения, зачем они добавляли его, если бы это уже можно было сделать, но я думал, что попробую, на всякий случай – tjm