Я строю систему с низкой задержкой, в которой у меня есть функции с более чем одним значением перечисления в качестве параметров шаблона. Вместо этого просто проверьте один раз, а затем передайте его как аргумент шаблона для остальных функций. Мой фактический пример отвлекает, так что вот mre: < /p>
Я строю систему с низкой задержкой, в которой у меня есть функции с более чем одним значением перечисления в качестве параметров шаблона. Вместо этого просто проверьте один раз, а затем передайте его как аргумент шаблона для остальных функций. Мой фактический пример отвлекает, так что вот mre: < /p> [code]#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()();