Оператор switch C++ не обладает способностью сопоставления шаблонов многих других языков. Вам нужно будет сделать несколько иной подход.
Вот возможность я бросил вместе:
pair_switch(my_pair,
std::make_tuple(true, false, []{ std::cout << "true and false"; }),
std::make_tuple(false, true, []{ std::cout << "false and true"; }));
Вы обеспечиваете std::pair<bool,bool>
и множество случаев, как std::tuples
, где первые два элемента совпадают пары вы передаете в и третий элемент является функция для вызова для этого случая.
Реализация имеет несколько трюков шаблонов, но должен быть довольно годными к употреблению:
template <typename... Ts>
void pair_switch(std::pair<bool,bool> pair, Ts&&... ts) {
//A table for the cases
std::array<std::function<void()>, 4> table {};
//Fill in the cases
(void)std::initializer_list<int> {
(table[std::get<0>(ts)*2 + std::get<1>(ts)] = std::get<2>(ts), 0)...
};
//Get the function to call out of the table
auto& func = table[pair.first*2 + pair.second];
//If there is a function there, call it
if (func) {
func();
//Otherwise, throw an exception
} else {
throw std::runtime_error("No such case");
}
}
Live Demo
я думаю [это] (http://en.cppreference.com/w/cpp/language/switch) помог бы. См., В частности, то, что ожидается как условие * *, и как оно определяется * constant_expression * оператора * case *, прежде чем продолжить. Что вы ожидаете от своего фрагмента? – skypjack