草庐IT

c++ - 静态库中的单例类

假设我在静态库中有一个单例类S,它可以与其他动态库D1D2D3链接,因此据我了解,类S在每个D1、D2和D3中都有一个单独的实例,即使它不是单例(如全局)也是如此有什么办法可以防止类S的多个拷贝吗?我不能将单例S放在另一个动态库中。Executable/|\\D1D2D3D4|||SSS编辑:单例S在单独的静态库中,与D1D2D3...分别链接。单例分配在堆中,只有指针是静态的statics::instance(){staticsmart_ptrptr=NULL;if(ptr==NULL)ptr=newS;returnptr;}编辑2:我做了一个简单的测试用例来检查一下这是一个示例ma

c++ - 如何在 Eigen3 库中有效地提取复数矩阵的实部/虚部?

我在Eigen3库中有一些复杂、密集的vector/矩阵,我想将实部和虚部提取到单独的数组中。在Matlab中,我可以做类似的事情cplxFoo=[1,1i;-1i-1]re=real(cplxFoo)im=imag(cplxFoo)预期yieldcplxFoo=1.0000+0.0000i0.0000+1.0000i0.0000-1.0000i-1.0000+0.0000ire=100-1im=01-10有没有类似real()的东西和imag()Eigen3中的Matlab函数?现在,我知道唯一能起作用的是类似于MatrixXcdcplxFoo=...;MatrixXdre(cplx

c++ - 如何将 C++ 库嵌入到 C 库中?

我有一个关于将一个库嵌入另一个库的问题。我有一个纯C代码,我的用户依赖它,他们不想依赖C++库。但是,需要将第3方库(ICU)嵌入到我的程序中。不会导出任何ICU函数,它们只会在我的库内部使用。不幸的是,ICU是一个C++库,尽管它确实有一个C包装器。ICU不使用异常,但它确实使用RTTI(抽象基类)。问题是我怎样才能创建我的静态库,这样ICU嵌入到我的库中(所有对ICU函数的引用都在我的库中解析)所有对libstdc++的引用也已解决,必要的代码已嵌入到我的库中如果用户甚至没有在他们的系统上安装libstdc++,一切正常如果用户碰巧在C++项目中使用我的库,那么与他使用的任何lib

c++ - 如何将 "make"c++ 代码放入 xcode 的库中

澄清澄清:我知道如何使用obj-c或swift在Xcode中创建库。我知道如何在项目中使用这些。我知道如何编译这些项目,所以一切正常。我不知道的是如何获取开源C源代码(呵呵)并将其构建/制作/编译成库。只是为了澄清以下所有内容:我正在寻找一种在Swift应用程序中使用c库的方法,这意味着使用Xcode。C库不必使用/在Xcode中构建,我可以使用其他工具。我通常自己编写所有我使用的代码,不幸的是我只在Xcode中编写Swift。所以我在使用框架/库方面有点落后。现在我真的很想探索TesseractOCR,但我在构建所需的库时遇到了问题。对我来说,最好真正了解它的工作原理并能够自己完成,

c++ - C++ 库中的快速梯度下降实现?

我正在寻找运行梯度下降优化来最小化变量实例化的成本。我的程序在计算上非常昂贵,所以我正在寻找一个可以快速实现GD的流行库。推荐的图书馆/引用资料是什么? 最佳答案 GSL是一个很棒的(免费的)库,已经实现了数学和科学兴趣的常见功能。您可以仔细阅读整个referencemanualonline.四处寻找,this开始看起来很有趣,但我认为我们需要更多地了解这个问题。 关于c++-C++库中的快速梯度下降实现?,我们在StackOverflow上找到一个类似的问题:

c++ - 在某些静态库中打开整个程序优化会显着增加库的大小!

在VisualStudio2010中,我有一个C/C++静态库项目。当我在release模式下打开选项wholeprogramoptimization时,我得到了一个超过90MB的.lib文件!当我关闭这个选项时,大小减少到24MB。该库包含数百个使用proto-buffer生成的类。我想知道为什么这个选项会增加尺寸?在什么情况下我们必须关闭它?编辑:将MO更改为MB感谢chrisaycock 最佳答案 整个程序优化意味着直到链接阶段才进行优化。静态库的大小不是看的东西。在这种模式下,静态库可能充满了最终优化/链接阶段所需的额外信息

c++ - 为什么 C++ 版本的 C 库中有 "c"前缀?

math.h->cmathstdlib.h->cstdlib我理解“.h”版本和“c-prefix”版本之间的区别,但选择使用“c”前缀的原因是什么? 最佳答案 编辑:好的,我们有些人可能没有足够仔细地阅读问题,或者对问题的含义或答案的解释方式做出了假设。我在这里回答以下问题:butwhatwasthereasontochoosetousethe"c"prefix?为了强调它最初来自C语言,我想。 关于c++-为什么C++版本的C库中有"c"前缀?,我们在StackOverflow上找到

c++ - 共享库中模板化类和 dynamic_cast 的显式实例化

今天我遇到了一个我似乎无法解决的问题。我正在编译一个共享库,其中包含一个模板化类(Derived,其基础是Base)和此类的一些显式实例化。我希望图书馆用户从这个模板化类中扩展。当我尝试dynamic_cast时出现问题来自Base*的用户实例至Derived*.我已经将问题缩小到这个MWE:共享库包含以下文件:Base.h#ifndefBASE_H_#defineBASE_H_classBase{public:Base();virtual~Base();};#endif/*BASE_H_*/Derived.h#ifndefDERIVED_H_#defineDERIVED_H_#inc

c++ - std::move 在 boost 库中的对应物

我正在尝试在我的代码中使用std::move,但我使用的编译器(g++4.4)不支持它。boost::move可以完全替代std::move吗?谢谢。 最佳答案 std::move(和boost::move当启用c++0x支持时)只是来自T&的转换至T&&.它实际上并没有移动任何东西。这意味着指针的具体类型T&&必须得到编译器的支持。GCC从4.3版本开始支持右值引用,所以boost版本应该没问题。但是,有没有理由不能使用std::move来自#include?http://en.cppreference.com/w/cpp/uti

c - Microsoft C 库中的重复符号

我正在为WindowsPE格式目标文件编写一个链接器,我已经到了可以将Microsoft编译器生成的目标文件链接在一起的阶段,但是当我尝试与libcmt.lib链接时,我得到了一个很多重复的符号。例如,cosl由库中的三个不同对象定义。这三个都引用了不同地方的定义,而且这三个看起来都很真实,例如它们指向名为.text$mn的文本段并具有存储类IMAGE_SYM_CLASS_EXTERNAL。是不是这些是替代版本,链接器应该根据某些标准选择一个版本,还是我对PE库格式的语义有一些误解? 最佳答案 如评论中所述,OP未正确处理COMDA