Как управлять выполнять чеки n + m вместо n * m для значений contexPR?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как управлять выполнять чеки n + m вместо n * m для значений contexPR?

Сообщение Anonymous »

Я строю систему с низкой задержкой, в которой у меня есть функции с более чем одним значением перечисления в качестве параметров шаблона. Вместо этого просто проверьте один раз, затем передайте его как аргумент шаблона для остальных функций. Мой фактический пример отвлекает, так что вот mre: < /p>

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

#include 

enum class Color {
Red,
Green,
Blue
};

enum class Type {
Car,
Bus,
Truck
};

struct Vehicle {
Color color;
Type type;
};

template 
constexpr auto perform(Vehicle& vehicle, Func&& func) {
// Ideally, we'd want something like this:
// constexpr auto color = [&] {
//     if (vehicle.color == Color::Red) return Color::Red;
//     if (vehicle.color == Color::Green) return Color::Green;
//     return Color::Blue;
// }();
//
// constexpr auto type = [&] {
//     if (vehicle.type == Type::Car) return Type::Car;
//     if (vehicle.type == Type::Bus) return Type::Bus;
//     return Type::Truck;
// }();
//
// return func.template operator()();

if (vehicle.color == Color::Red) {
if (vehicle.type == Type::Car) {
return func.template operator()();
} else if (vehicle.type == Type::Bus) {
return func.template operator()();
} else {
return func.template operator()();
}
} else if (vehicle.color == Color::Green) {
if (vehicle.type == Type::Car) {
return func.template operator()();
} else if (vehicle.type == Type::Bus) {
return func.template operator()();
} else {
return func.template operator()();
}
}

if (vehicle.type == Type::Car) {
return func.template operator()();
} else if (vehicle.type == Type::Bus) {
return func.template operator()();
}

return func.template operator()();
}

int main() {

Vehicle v { Color::Red, Type::Car };

auto func = [&]  {
if constexpr (color == Color::Red) {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79640301/how-to-manage-perform-n-m-checks-instead-of-n-m-for-constexpr-values[/url]
Ответить

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

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

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

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

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