Код: Выделить всё
#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]