Pha*_*ann 5 c++ string opencv std
在OpenCV项目中通常cv::String用于函数,例如简单putText.但是,使用std std::string时负责的功能.例如,在这种情况下
ifstream stream(filepath);
string line;
getline(stream, line, '\n');
Run Code Online (Sandbox Code Playgroud)
它必须有一个std::string作为cv::String引发错误.反之亦然使用OpenCV函数的std::string情况正确转换为cv::String代码确实有效:
string Str = "Test";
putText(img, Str, Point(10, 10), FONT_HERSHEY_PLAIN, 1, Scalar::all(255), 1);
Run Code Online (Sandbox Code Playgroud)
问题
为什么OpenCV有自己的String-Class?我认为可能存在一些对OpenCV有用的差异,而所有(或大多数?)功能std::string仍然可能cv::String.但它似乎std::string可以转换为cv::String(我至少测试过它putText.
文档显示了类似的功能,但也有一些差异,如相关的功能static bool operator> (const String &lhs, const String &rhs)和类似的:
http://docs.opencv.org/3.1.0/d1/d8f/classcv_1_1String.html for cv::String
http://www.cplusplus.com/reference/string/string/ forstd::string
我错过了什么吗?
我有理由在一个项目中使用两个版本的字符串,还是只能std::string在更好的可读性方面使用它?(只要不使用前面提到的相关功能)
编辑:这里的问题解决了QString和字符串的类似问题,建议std::string尽可能使用.我想知道这对OpenCV是否也有效.
为什么OpenCV有自己的字符串类?OpenCV是一个非常古老的图书馆(2000年6月首次发布).那时,标准库的可靠性较差,而OpenCV团队可能认为他们宁愿自己编写.几年前,MFC团队做出了同样的决定,Qt团队和wxWidgets团队做出了同样的决定.这种"字符串"类的扩散正是标准委员会定义的原因std::string- 但为时已晚.
如果你可以在整个项目中只使用一个字符串类,那就去吧.通常你不能; 例如,给定一个返回a的函数,给定一个cv::String没有自动转换为std::string.cv::String非const引用的函数,你需要一个实际的cv::String对象来传递.(编辑:乔纳斯指出存在是从自动转换cv::String到std::string).
另请注意,您的调用putString可能实际上使用了cv::String- 它是std::string通过转换构造函数隐式构造的.如果(并且仅当)您有性能热点,那些不必要的转换可能是个问题.
| 归档时间: |
|
| 查看次数: |
3376 次 |
| 最近记录: |