草庐IT

shared-libraries

全部标签

c++ - `shared_ptr` 是如何实现协变的?

可以复制或构建shared_ptr来自shared_ptr(即shared_ptrptr=make_shared())。但众所周知,模板类不能相互转换,即使模板参数可以。那么如何才能shared_ptr检查它们的指针的值是否可转换,如果是则进行转换? 最佳答案 是的,默认情况下同一类模板的特化几乎没有关系,基本上被视为不相关的类型。但是您始终可以通过定义转换构造函数(To::To(constFrom&))和/或转换函数(From::operatorTo()const)来定义类类型之间的隐式转换。那又如何std::shared_ptr

c++ - 关于 "building a library"的初学者问题,特别是在 iPhone 上的 Xcode 中

我从来没有清楚地理解所有这些链接/构建/依赖业务。现在,我正在尝试将FreeType库(在C++中)构建到iPhone的*.a库文件中(因为我尝试使用的另一个库openFrameworks将依赖于FreeType)。我知道要用iPhone编译C++,我只需要将*.cpp重命名为*.mm。(我在main()中尝试了一些简单的程序并且它有效)但是我怎样才能在Xcode中构建库?(我想没有main())另一方面,如果你们能推荐一些关于此类链接/构建主题的书籍或文档,那就太好了,我发现自己最困惑。附言。我已经获得了Xcode的付费版本和一些编译到iPhone上的示例应用程序。

c++ - 在动态库中包装不同版本的静态库

在我的项目中,存在对来自第3方的静态库(从现在起称为libsomething)的依赖。最近,libsomething在另一个版本中可用。我的任务是为我的软件提供对旧版本和新版本的支持。在任何给定时间在运行时只使用一个版本的libsomething,但是应该在程序运行之间配置它是哪个版本。我在WinXP上使用MSVC2005,第二个目标是准备切换到Linux和GCC。因为libsomething的两个版本都使用相同的符号,将它们链接到我的可执行文件是不可能的,因为两个版本的符号在链接时会发生冲突。虽然我可以创建两个可执行文件(一个链接旧版本,另一个使用新版本),但我无法决定在最终部署环境

c++ - 为什么 std::tr1::shared_ptr<>.reset() 如此昂贵?

分析一些大量使用shared_ptrs的代码,我发现reset()的开销出奇地大。例如:structTest{inti;Test(){this->i=0;}Test(inti){this->i=i;}};...autot=make_shared(1);...t.reset(somePointerToATestObject);跟踪最后一行中的reset()(在VC++2010下),我发现它创建了一个新的引用计数对象。有没有更便宜的方法,重用现有的引用计数并且不打扰堆? 最佳答案 在一般情况下,您不能重用现有的引用计数,因为可能有其他s

c++ - 如何使用 Boost Graph Library 获取边缘的端口标识符?

使用BoostGraphLibrary,是否可以获取边缘的端口标识符?示例:调用read_graphviz后,我可以遍历该图的边并打印它们的node_id——我得到“A->B,A->乙”。如何打印类似“A:p0->B:p1,A:p0->B:p2”的内容?digraphG{A[label="A|p0"];B[label="B|p1|p2"];A:p0->B:p1;A:p0->B:p2;} 最佳答案 来自read_graphviz_new.hpp来源:structedge_info{node_and_portsource;node_an

c++ - 迪尔德 : Library not loaded (image not found) but it's there

尝试在另一台Mac上启动我的Qt应用程序(使用macdeployqt部署)时出现此错误。dyld:Librarynotloaded:kqoauth.framework/Versions/0/kqoauthReferencedfrom:/MyProject.app/Contents/MacOS/MyProjectReason:imagenotfoundTrace/BPTtrap我检查了.app-bundle并将kqoauth.framework复制到几个不同的位置(框架文件夹,可执行文件旁边,资源文件夹),但错误仍然存​​在。这是我的项目树:我也试过otool-L它,一切似乎都很好。(k

c++ - "STL"和 "C++ Standard Library"之间是否有清晰的分隔定义?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:What'sthisSTLvs.“C++StandardLibrary”fightallabout?我非常习惯STL(“标准模板库”)这个术语,当我真正指的是C++标准库时,我发现自己经常使用它。因此,由于如今C++(-11)标准库中的几乎所有内容都是模板,我想知道:在C++标准库中是否定义了什么是STL,什么不是?也许是容器、流、算法等?或者我应该停止使用术语“STL”,因为它是SGI(对吗?)多年前用于其lib的历史性术语?这将是困难的...

c++ - 使用共享库运行程序时出错

有这样的代码:#include#includeusingnamespacestd;intmain(intargc,char**argv){CXIndexIndex=clang_createIndex(0,0);CXTranslationUnitTU=clang_parseTranslationUnit(Index,0,argv,argc,0,0,CXTranslationUnit_None);for(unsignedI=0,N=clang_getNumDiagnostics(TU);I!=N;++I){CXDiagnosticDiag=clang_getDiagnostic(TU,I)

c++ - boost::python 函数调用中 boost::shared_ptr 的转换

考虑以下示例:#include"Python.h"#include#includeclassA{};classB:publicA{};voidfoo(boost::shared_ptr&aptr){}BOOST_PYTHON_MODULE(mypy){usingnamespaceboost::python;class_>("A",init());class_,bases>("B",init());def("foo",foo);}如果我调用python代码importmypyb=mypy.B()mypy.foo(b)我明白了ArgumentError:Pythonargumenttype

c++ - 混合共享/静态库时静态成员的多个拷贝

情况:我有:classPlatform{public:Platform(){count++;cout创建为静态库。考虑做一个动态库扩展class__declspec(dllimport/dllexport)DerivedPlatform:publicPlatform{}是的,我知道我是从非dll接口(interface)类派生的。每:Arestaticfieldsinherited?,应该只有一个计数实例。这是棘手的部分,实际上我最终得到了count的两个不同拷贝(即使count被声明为静态的)。即,在加载dll并调用registerPlatforms()后,它会增加一个不同的计数对象