Boost.Functional/OverloadedFunction を試してみた
以前から気になっていたんですがやっと試してみました。
OverloadedFunction を使用すれば複数の関数を1つの関数オブジェクトにまとめる事ができます。
[ソース]
#include <boost/functional/overloaded_function.hpp> #include <boost/lexical_cast.hpp> #include <string> #include <iostream> std::string to_string(int n){ return boost::lexical_cast<std::string>(n); } int to_int(std::string str){ return boost::lexical_cast<int>(str); } int main(){ // 複数の関数を1つの関数オブジェクトにまとめる boost::overloaded_function< std::string(int), int(std::string) > multi(&to_string, &to_int); // 多重定義関数のように引数の型によって呼び出す関数を決める std::cout << multi(10) + "-mami" << std::endl; std::cout << multi("42") * 2 << std::endl; return 0; }
[出力]
10-mami 84
以前、似たようなコードを書いたのですが、Boost にもあったんですね。
ただ、関数の型とかを書くのがちょっとめんどくさい。
(C++03 ならしょうがない気がするけども。