C++ 11の "LINQ to Objects"ライブラリで作業しています。 私はこのようななめらかにしたいと思っ:私はダウンarr.where_i(...)
を書きたいファンクタのparam count型によるC++のオーバーロード
// 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; })
- それは醜いです。だから私は、ラムダ型によって関数/メソッドのオーバーロードを必要とする ...
これは私のソリューションです:それはSFINAEソリューション
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
}
ですか? 私に何を提案できますか?
このソリューションは機能しますが、私はmy_magic_funcを書くために引数の型を知る必要があります。それは快適ではありません。 – k06a
boost :: rangeを見てみるといいでしょう。 –
私はC#LINQスタイルをコピーすることを主なターゲットとしたライブラリに取り組んでいます...興味があれば、ここで入手できます:http://code.google.com/p/boolinq/ – k06a