Есть ли способ оценить набор функций 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++»