次のようなコードを使用して、文字列-> cv::Point 変換を処理するように lexical_cast を拡張しようとしています。
#include <iostream>
#include <opencv2/opencv.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
namespace boost {
template<>
cv::Point2f lexical_cast(const std::string &str) {
std::vector<std::string> parts;
boost::split(parts, str, boost::is_any_of(","));
cv::Point2f R;
R.x = boost::lexical_cast<float>(parts[0]);
R.y = boost::lexical_cast<float>(parts[1]);
return R;
}
}
int main(int argc, char **argv) {
auto p = boost::lexical_cast<cv::Point2f>(std::string("1,2"));
std::cout << "p = " << p << std::endl;
return 0;
}
そして、それはうまく機能します..しかし、cv::Point2f
実際にはcv::Point_<T>
、Tがint、float、doubleなどになる可能性があります.とにかく、そのテンプレート化された引数をlexical_castに公開する方法を見つけることができないため、すべてを処理できる単一のlexical_cast関数を持つことができますcv::Point_<T>
種類。