高階関数へオーバーロードされた関数を渡す - Faith and Brave - C++で遊ぼう
関数オブジェクトをかますとキャストが不要になるようです。余計回りくどくなっている気もしますが……。
#include <string> #include <vector> #include <algorithm> using namespace std; double stod(const std::string& s) { return atof(s.c_str()); } double stod(const std::wstring& s) { return wcstof(s.c_str(), 0); } struct stod_adapter { template<class T> double operator()(const T& s) { return stod(s); } }; int main() { string ar[] = {"3.14", "1.23", "5.67"}; vector<double> v; //transform(ar, ar + 3, back_inserter(v), &stod); // エラー!あいまいな関数を指定した transform(ar, ar + 3, back_inserter(v), stod_adapter()); return 0; }
gcc(g++)には _wotf がなかったので wcstof で代用しています。一応動いている様子。