Перегрузка 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? Что вы можете мне предложить?

Ответы на вопрос(2)

Ваш ответ на вопрос