優先順位付オーバーロード関数オブジェクト
事の起こり
apply(a,b)( //a,bは多態型 [](int,int){} ,[](auto,int){} ,[](auto,auto){} )
みたいなことをやりたかった
優先順位付オーバーロード関数オブジェクト
関数が上からチェックされるオーバーロード関数オブジェクト
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ
ordered overload function oject · GitHub
auto f=alol::make_poly( [](int,auto){std::cout<<"(int,auto)";} ,[](auto,int){std::cout<<"(auto,int)";} ,[](auto,auto){std::cout<<"(auto,auto)";} ); f(42,42);
上から評価されるので(int,auto)と(auto,int)でかち合わない
問題は
auto g=alol::make_poly( [](double){std::cout<<"double";} ,[](int){std::cout<<"int";} ); g(42);
のようなときにintがdoubleに暗黙型変換されてしまうことである
そういう場合はoverloadルールで解決されるmake_overloadを使おう
make_overloadを書いた - ここは匣