草庐IT

single-version-externally-managed

全部标签

c++ - boost::interprocess::managed_shared_memory 在不同版本的 boost 之间的兼容性

是否有明确的兼容性保证boost::interprocess::managed_shared_memory可以跨不同的boost版本工作?我打算用它在多个进程之间共享一个整数或十(这实际上将充当它们都读取和写入的一段数据的修订号)。这些进程是单独发布的,并且偶尔会终止使用。问题是:我是否会因为1.51中的managed_shared_memory无法与1.44中的managed_shared_memory进行对话而将自己永远锁定在给定的boost版本上? 最佳答案 根据BoostFAQ:HowcantheBoostlibraries

c++ - 如何调试或修复涉及 boost::interprocess managed_shared_memory 的无限循环和堆损坏问题?

我收到以下“第一次机会异常”消息,该消息来self编写的DLL,该DLL在我未编写的可执行文件中运行。也就是说,DLL是一个插件。第一次触发此异常时,尝试打开共享内存映射文件失败。如果我忽略第一次机会异常而只是运行,应用程序最终会卡住或崩溃。First-chanceexceptionat0x76a7c41finnotmyexe.exe:MicrosoftC++exception:boost::interprocess::interprocess_exceptionatmemorylocation0x002bc644..几个小时后,它似乎是由一段无限循环的代码块引起的,直到预期的异常条件

c++ - Visual Studio 2010 : Fatal Error C1902 about "program database manager"

这是来自MSDN的一些描述ErrorMessageprogramdatabasemanagermismatch;pleasecheckyourinstallationAprogramdatabasefile(.pdb)wascreatedusinganewerversionofmspdb80.dllthantheonefoundwhilecompiling.Thiserrorusuallyindicatesthatmspdbsrv.exeormspdbcore.dllaremissingorhavedifferentversionsfrommspdb80.dll.Ensurematch

c++ - 除了避免 'extern C' 并获得 'C++ exception' 之外,将 Lua 编译为 C++ 有什么好处?

我是Lua的新手,我想使用C++将Lua嵌入到我们的游戏项目中。我注意到的第一件事是,允许将Lua编译为C++代码,并且从文档中,我了解到这将消除环绕Luaheader的“externC”,并且错误处理将是C++异常而不是跳远/定跳。我的问题是,除了这两个区别之外,将Lua代码编译为C++代码还有其他真正的好处吗?这两个并不能真正说服我,因为,1)用'externC'包装cheader并不困扰我,2)我们的项目不允许异常,所以我必须更改luaconf.h才能使用longjump/setjump任何方式。 最佳答案 那些是将Lua编译

c++ - "single allocation"对 boost::make_shared 意味着什么

在make_shared的boost文档中,它说:Besidesconvenienceandstyle,suchafunctionisalsoexceptionsafeandconsiderablyfasterbecauseitcanuseasingleallocationforboththeobjectanditscorrespondingcontrolblock,eliminatingasignificantportionofshared_ptr'sconstructionoverhead.我不明白“单一分配”的意思,是什么意思? 最佳答案

c++ - 正确使用 'extern' 关键字

有一些资源(书籍、在线资料)解释了extern的用法,如下所示:externinti;//declaration-has'extern'inti=1;//definition-specifiedbytheabsenceof'extern'并且有支持以下语法的来源:externinti;//declarationexterninti=1;//definition-specifiedbytheequalsign//Bothmarkedwith'extern'我的问题是-这是C与C++的区别,还是pre-ANSI与ANSI练习?现在,更实际的问题:使用第二种语法,我想创建一个全局对象(从每个

c++ - 使用可变参数模板重载函数模板 : Intel c++ compiler version 18 produces different result from other compilers. intel 错了吗?

考虑以下代码片段:templateclassA,typename...Ts>inta(Aarg){return1;//Overload#1}templateinta(Aarg){return2;//Overload#2}templatestructS{};intmain(){returna(S());}在使用模板类的实例调用函数a时,我希望编译器选择更特殊的函数重载#1。根据compilerexplorer、clang、gcc和17版之前的英特尔实际上会选择重载#1。相反,后来的英特尔编译器版本(18和19)选择重载#2。是代码定义不正确还是最新的英特尔编译器版本有误?

c++ - 你如何声明一个 extern "C"函数指针

所以我有这段代码:#include"boost_bind.h"#include#include#includedoublefoo(doublenum,double(*func)(double)){return65.4;}intmain(intargc,char**argv){std::vectorvec;vec.push_back(5.0);vec.push_back(6.0);std::transform(vec.begin(),vec.end(),vec.begin(),boost::bind(foo,_1,log));}并收到此错误:returnunwrapper::unwrap

c++ - #ifdef __cplusplus extern "C"{ #endif 的最佳位置在哪里

我想知道放在哪里比较好#ifdef__cplusplusextern"C"{#endif在C头文件中。在所有其他包含的开头或之后。为什么? 最佳答案 对此没有严格的规定,但要注意以下几点。一般原则是每个头文件都自行处理(并且是自给自足的)。因此,根据这个原则,不需要将头文件包装在extern“C”中,因为头文件中会有一个extern“C”(如果需要的话)。因此,在当前文件中,您可以将它放在其他包含文件之后。但是如果你确实有一大堆标题,你不想添加一个外部“C”,并且想通过一个单独的包含来提供,无论如何,继续把它们包装起来在文件宽外部“

c++ - extern C 不能在类级别使用?

只是想确认在Windows环境下,VSTS2008+C++项目,我们只能将externC应用到函数级别,不能应用到类级别(这样类中的所有成员函数都使用C语言名称修饰)?试了好几种方法,总是编译出错。提前致谢,乔治 最佳答案 您可以通过非常复杂(但完全合法)的hack将extern"C"应用于成员函数:extern"C"typedefintbar_t(intx);structfoo{bar_tbar;//yes,thisdeclaresanonstaticmemberfunction!};intfoo::bar(intx){retur