Есть ли способ оценить набор функций constexpr во время компиляции на C++?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ оценить набор функций constexpr во время компиляции на C++?

Сообщение Anonymous »

Я новичок в шаблонах C++ и пытаюсь создать функцию шаблона constexpr, которая принимает пакет параметров других функций типа возвращаемого значения bool (и в этом примере типа ввода int) и проверяет, удовлетворяет ли данное значение всем их.
Я извлек важные фрагменты кода и оставил некоторые реализации, которые не должны иметь значения.
Пункт 1 ниже описывает, как Я хочу, чтобы функция вела себя где is_in_v — это метафункция, которая проверяет, содержится ли значение данного типа в наборе значений после него.
Это прекрасно работает само по себе, но выдает ошибку, когда я пытаюсь передать func(b)... потому что b не является постоянным выражением.
Для меня это имеет смысл, однако элемент 2, кажется, ведет себя нормально во время компиляции, даже если ему передается то же самое значение b.
Это заставляет меня задуматься, соответствует ли моя идея достижимо, потому что мне кажется, что то, что работает в пункте 2, по сути, не так уж далеко от того, что я пытаюсь сделать, но я не знаю, как обойти эту ошибку.

Код: Выделить всё

constexpr bool f1 (int a) { return true; }
constexpr bool f2 (int a) { return false; }
constexpr bool f3 (int a) { return a > 3; }

//Item 1
template
constexpr bool test(int b) {
return !is_in_v;
}
//Item 2
template
constexpr bool test2(int b) {
return func(b);
}

...

int main () {
static_assert(test(5)); //ERROR: b is not a constant expression
static_assert(test2(5)); //works fine
}
Если бы кто-нибудь мог сказать мне, имеет ли то, что я пытаюсь сделать, какой-либо смысл или существуют альтернативные решения, я был бы очень признателен.
Я попробовал передать ссылку на константу, и это сработало для функций f1 и f2, но только делегировало проблему того, что параметр b в тесте не является constexpr, параметру a в f3.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -time-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»