所以我在研究后听到的是,唯一可靠的免费OCR选项是Tesseract或CuneiForm.
现在,Tesseract文档非常可怕,他们给你的只是一堆Visual Studio代码(适用于我的Windows),从那里你就可以在他们的API海洋中独立完成.您所能做的就是使用编译的exe然后在tiff图像上使用它.
我期待至少很短的文档告诉你如何拉动他们的API调用来使用OCR至少是一个小例子但是没有,他们的文档中没有类似的东西.
CuneiForm:我下载了它,"很棒"一切都用俄语.:(
这些家伙真的很难提起一个小例子而不是他们为我们提供了大量不相关的信息,可能有90%的人无法到达,你怎么能在没有开始小事情的情况下到达那里并且他们不解释它们!
所以我有一堆API,但如果它无处可解,我该怎么用?...也许有人可以给我建议和解决方案?我不是要求一个奇迹,只是一些小事来告诉我事情是如何运作的.
我reset()用作shared_pointer的默认值(相当于a NULL).
但是如何检查shared_pointer是否是NULL?
这会返回正确的价值吗?
boost::shared_ptr<Blah> blah;
blah.reset()
if (blah == NULL)
{
//Does this check if the object was reset() ?
}
Run Code Online (Sandbox Code Playgroud) 如何创建自定义的javadoc标签,例如@pre/@post?我发现了一些解释它的链接,但我没有运气.这些是一些链接:
http://www.developer.com/java/other/article.php/3085991/Javadoc-Programming.html
http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javadoc.html
我需要一个Haskell foldl函数的模拟来折叠任何STL容器.预期签名如下:
template Iterator, FoldingFunction, Result
Result foldl(
Iterator begin,
Iterator end,
FoldingFunction f,
Result initValue);
Run Code Online (Sandbox Code Playgroud)
标准STL没有这样的功能.是否加速有什么?
我知道它实现起来非常简单,但我想知道是否有任何现成的标准化实现.
还有一个问题:你通常如何在C++/STL中折叠数据列表?
这是我从来没有用const-ref得到的东西,我真的希望有人可以向我解释.
当调用另一个函数内部的函数时,我得到的const-ref是传递我不打算篡改的堆栈对象的最佳方法.例如:
void someInnerFunction(const QString& text) {
qDebug() << text;
}
void someFunction() {
QString test = "lala";
....
someInnerFunction(test);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我觉得这么好.但信号怎么样?传递参考文件是否存在任何风险?即便如此const.感觉就像我一直在阅读关于const-ref的所有文档,但我仍然觉得有点冒险,因为我将其理解为"发送一个对象的引用并保持它const".如果它所指的对象超出范围怎么办?
例如:
void someFunction() {
connect(this, SIGNAL(someSignal(const QString&)), this, SLOT(someSlot(const QString&)));
QString test = "lala";
emit someSignal(test);
// doesnt test go out of scope here? and since im not using queued connection the QString object doesnt get copied.
}
void someSlot(const QString& test) {
qDebug() << test; // will this work?
}
Run Code Online (Sandbox Code Playgroud)
这里到底发生了什么?我经常在函数调用中使用const-ref,我只想访问该对象但不更改它.但信号怎么样?大多数信号在Qt doc中似乎都有const-ref parm,但它是如何工作的?
c++ qt signals-slots const-reference pass-by-const-reference
编辑:我特别比较std::vector的线性搜索操作的std::map 二进制搜索行动,因为这是香草的要求似乎涉及到.我知道使用二进制搜索会将性能从O(N)移到O(log N),但这不会测试Herb的声明
Bjarne Stroustrup和Herb Sutter最近都谈到了std::vector在人们期望std::list使用的情况下有多棒,这是由于链表遍历期间缓存未命中的代价.(见48分钟后http://channel9.msdn.com/Events/Build/2014/2-661)
Herb做了进一步的声明,然而对有序矢量的操作甚至更快std::map(参见http://i.imgur.com/zX07TZR.png取自上述channel9视频的51:30标记),我发现很难捉摸.所以我创建了一个小测试来证明这一点并且很难再现这些结果:https://ideone.com/MN7DYK
这是测试代码:
template <typename C>
void test(std::string name, std::vector<int> shuffledInputValues, C & c)
{
// fill container 'c' with values from 'shuffledInputValues' then erase them all
{
std::cout << "testing " << name << "..." << std::endl;
timer t;
for (auto val : shuffledInputValues) insert(c, val);
for (auto val : shuffledInputValues) remove(c, val);
}
} …Run Code Online (Sandbox Code Playgroud) 我正在研究某个C++库(或更多框架).我想让它向后兼容以前的版本,不仅保留了API兼容性,还保留了ABI(就像Qt那样出色的工作).
我使用Boost的许多功能,对我来说,这使得向后兼容性变得不可能,除非我强迫用户拥有完全相同(有时是旧版本)的Boost.
有没有办法(没有重写1/2 Boost)在其命名空间周围做一些"前缀"/重命名它以防止它干扰用户版本的Boost?
例如,我的libXYZ使用Boost 1.33并且它有类boost::foo.在版本1.35 boost::foo升级并添加了新成员,因此,boost::foo从1.33和1.35不兼容ABI.因此,libXYZ的用户必须使用Boost 1.33或使用Boost 1.35重新编译libXYZ(可能已经以XYZ无法编译的方式破坏了某些API).
注意:我说的是带有ELF的UNIX/Linux操作系统,其中动态链接类似于静态链接,因此您无法链接两个不同版本的库,因为符号会产生干扰.
我可能想到的一个合适的解决方案是将Boost放在其他一些私有命名空间中.因此,libXYZ将使用::XYZ::boost::foo而不是::boost::foo.这可以防止与用户可能使用的其他版本的Boost冲突.
因此,libXYZ将继续使用Boost 1.33与其他命名空间静态或动态链接,假设它:
有没有办法用Boost做这些事情?
编辑:最后我决定创建一个脚本,将源中的所有boost符号重命名为某个自定义符号.
基本原理:构建过程的简化,独立于编译器可见性支持,它的可见性仅适用于动态库,对于静态,这不起作用,因此我需要为每种类型的库提供单独的构建和依赖.
该脚本可在那里找到:http://art-blog.no-ip.info/files/rename.py
编辑2:最新版本的Boost BCP支持命名空间重命名.
我知道有一个用于序列化的Boost模块boost::shared_ptr,但我找不到任何东西std::shared_ptr.
另外,我不知道如何轻松实现它.我怕以下代码
namespace boost{namespace serialization{
template<class Archive, class T>
inline void serialize(Archive & ar, std::shared_ptr<T> &t, const unsigned int version)
{
if(Archive::is_loading::value) {T*r;ar>>r;t=r;}
else {ar<<t.get();}
}
}}//namespaces
Run Code Online (Sandbox Code Playgroud)
不起作用.实际上,如果某个对象被多次引用,它将被第一次运行加载ar>>r,之后只会复制一个指针.但是,我们会创建shared_ptr指向它的多个对象,因此会多次破坏它.
有什么想法吗?
关于我正在使用的系统的一些技术细节:
sudo apt-get install libboost-dev)如果我有UTF-8 std::string怎么把它转换成UTF-16 std::wstring?实际上,我想比较两个波斯语.
我有两个String数组,让我们说:
String[] s1 = {"a","b","c"}
String[] s2 = {"c","a","b"}
Run Code Online (Sandbox Code Playgroud)
//这些数组应该相等
我想以"最干净"的方式检查他们的平等.
我尝试过使用,Arrays.equals(s1,s2)但我得到了一个错误的答案.我想这个方法关心元素的顺序,我不希望这一点很重要.
你能告诉我怎样才能以一种好的方式做到这一点?