Перегрузка C ++ типом счетчика параметров функтора
Я работаю над & quot; LINQ to Objects & quot; библиотека для C ++ 11. Я хотел бы сделать что-то вроде этого:
<code>// filtering elements by their value arr.where( [](double d){ return d < 0; } ) // filtering elements by their value and position arr.where( [](double d, int i){ return i%2==0; } ) </code>
Я хочу написатьarr.where_i( ... )
- это ужасно.
Поэтому мне нужна перегрузка функций / методов лямбда-типом ...
Это мое решение:
<code>template<typename F> auto my_magic_func(F f) -> decltype(f(1)) { return f(1); } template<typename F> auto my_magic_func(F f, void * fake = NULL) -> decltype(f(2,3)) { return f(2,3); } int main() { auto x1 = my_magic_func([](int a){ return a+100; }); auto x2 = my_magic_func([](int a, int b){ return a*b; }); // x1 == 1+100 // x2 == 2*3 } </code>
Это решение SFINAE? Что вы можете мне предложить?