Моя цель - иметь функцию, которая возвращает карту, которая может иметь тип Key, который изменяется в зависимости от функции, переданной в качестве параметра моей функции.
У меня есть следующая шаблонная функция (C ++11) пока что единственное компилируемое решение:
template <typename Container, typename Function, typename KeyType>
std::map< KeyType, std::vector<typename Container::value_type> >
group_by(Container &container, Function function, KeyType keyHint) { ...
Сейчас это позволяет мне использовать эту функцию следующим образом:
// the last parameter is just a type hint for the compiler
std::map<int, std::vector<int>> m = group_by(vec, func_that_returns_an_int, 1337);
...
std::map<int, std::vector<int>> m = group_by(vec, func_that_returns_an_int, -1);
// if we pass a function that returns bool, the map's key will be boolean
// the last parameter passed is just a hint for the compiler
std::map<bool, std::vector<int>> m = group_by(vec, is_even, true);
...
std::map<bool, std::vector<int>> m = group_by(vec, is_even, false);
Моя цель - не проходить мимослучайное значение для указания компилятору того, каким должен быть тип ключа карты, хотелось бы сделать что-то вроде этого:
std::map<int, std::vector<int>> m = group_by<int>(vec, func_that_returns_an_int);
...
std::map<bool, std::vector<int>> m = group_by<bool>(vec, is_even);
или это вообще возможно?
std::map<bool, std::vector<int>> m = group_by(vec, is_even);
Я поигрался с auto и decltype, чтобы посмотреть, не удастся ли намеку на компилятор с левой стороны операции.
auto group_by(Container &container, Function function) -> std::map< decltype(function(Container::value_type)), >