草庐IT

c++ - 使用 Boost 避免用户在 C++ 项目中访问文本资源

我正在使用EclipseHelios、QT4.6.1集成插件和boost1.52库开发一个C++项目。我想从xml文件中提取一些要使用的信息,目前我正在通过调用boost函数constread_xml(std::string&,Ptree&,int=0,conststd::locale&=std::locale()).关键是我想避免最终用户从发布文件夹访问该xml资源,但我不知道该怎么做。有没有什么(简单的)方法可以处理可执行文件内部的xml内容,以便将其加载到内存中并继续其余的过程,就像我已经在将xml文件视为项目资源一样?任何提示都会让我非常感激。提前致谢。

c++ - 如何避免 c++ 和 boost::python 文档之间的冗余?

我正在使用boost::python在C++代码中添加一个python模块。c++项目用doxygen记录。我想为python模块创建一个文档,但我不知道如何不像这样冗余:#includeusingnamespaceboost::python;/**@briefSumtwointegers*@paramaaninteger*@parambanotherinteger*@returnsumofintegers*/intsum(inta,intb){returna+b;}BOOST_PYTHON_MODULE(pymodule){def("sum",&sum,args("a","b"),"

c++ - 避免在 C++ 中创建新的不可变实例的样板

我正在处理持久数据结构。我将有一个复杂的类,我需要用它来创建一个新实例,但其中有一个或多个字段具有不同的值。structData{intfield1;intfield2;intfield3;//etc.public:DatawithField2(intnewField2){return{field1,newField2,field3};}};intmain(){Datad={1,2,3};std::cout最坏的情况,我可以像上面那样创建一堆withField1(newField1Value)方法,但是会有足够多的字段,以至于它会变得非常困惑。此外,我可能需要多个字段的新值,因此可能会

c++ - 在使用 boost 预处理器序列时避免扩展宏

我正在尝试获取操作系统和编译器名称作为C++中的字符串。尽管对此有很多疑问,但我没有找到明确的答案。所以我尝试使用Boost.Predef1.55,它定义了BOOST_OS_类型的宏。和BOOST_OS__NAME.因此可以简单地做if(BOOST_OS_)returnBOOST_OS__NAME;对于每个操作系统boost支持。与COMP的编译器相同而不是OS.为了避免重复,我想使用Boost.Preprocessor并将它们全部放在一个循环中。我想出的是这个:#defineMAKE_STMT_I2(PREFIX)if(PREFIX)returnPREFIX##_NAME;#defi

c++ - 如何避免在 C/C++ API 中对字符串进行编码混淆?

我正致力于在C和C++中实现不同的API,并且想知道有哪些技术可用于避免客户端在从框架接收字符串或将它们传回时出现编码错误。例如,想象一个简单的C++插件API,客户可以实现它来影响翻译。它可能具有这样的功能:constchar*getTranslatedWord(constchar*englishWord);现在,假设我想强制所有字符串都以UTF-8格式传递。当然我会记录这个要求,但我希望编译器强制执行正确的编码,也许通过使用专用类型。例如,像这样:classWord{public:staticWordfromUtf8(constchar*data){returnWord(data)

c++ - 为什么要避免在 HRESULT 处理中使用宏?

为什么在定义错误/HRESULT处理/日志记录时会选择或不选择使用宏?我正在处理一个通过接口(interface)调用的错误处理类,因此我可以使用Boost共享指针在我需要的时间和地点调用该类。(老实说;我不知道这是否是最好的方法,但我主要想看看我是否能做到,以及它会是什么样子)。即:typedefstd::shared_ptrError_Handler;Error_HandlerErr_Handler(newErrHandling);if(error){Err_Handler->vDX_ERR(ERR_D3D_INIT_SWAP);}我开始在DirectX中使用该类,由于Direct

c++ - 当输入 char 代替 int 时避免无限循环

我正在做一个银行系统项目,需要确保每个输入都是有效的(程序必须是健壮的)。如果输入无效,则用户必须重新输入。但是当我有一个int类型的变量并且用户输入char类型时,一个无限循环开始了。例如:inti;cin>>i;如果用户输入char无限循环开始。我怎样才能避免它并再次要求用户输入?谢谢 最佳答案 无限循环的原因:cin进入失败状态,这使得它忽略对它的进一步调用,直到错误标志和缓冲区被重置。cin.clear();cin.ignore(100,'\n');//100-->askscintodiscard100charactersf

c++ - 如何使用大 vector 初始化来避免 "compiler limit: compiler stack overflow"?

在我的单元测试中,我得到以下编译器错误:Theerrormessageindicatesasfollows:'fatalerrorC1063:compilerlimit:compilerstackoverflow'这是由一些生成的header引起的,其中包含:std::vectorGetTestData(){return{0x1,0x2,0x3};//Verylarge500kbofdata}如何在不使MSVC崩溃的情况下以这种方式使用vector?请注意,代码在clang和gcc中构建正常。 最佳答案 尝试将您的数据放入一个常量静

c++ - 如何避免为聚合初始化重新输入类型信息?

我有以下示例:#includestructA{constchar*str;constchar*str2;};templatestructAs{std::arrayelems_;};templateAs(Args...)->As;//Linktonon-workingexample虽然此代码有效,但我想避免在聚合列表中“重新输入”A,但如果我将其遗漏,推导指南将失败:“cannot推导出'As'"的模板参数(我想这是有道理的)。也许解决这个问题的一种方法是手写我需要的任何数量的推导指南,从那时起我可以在每个推导指南中编写A类型(即:我需要的每个尺寸一个推导容器)。

C++:同时避免静态初始化顺序问题和竞争条件

我使用的是WindowsXP/VisualC++2008。我遇到了一个C++静态初始化顺序问题,我用著名的“首次使用时构造”习惯用法解决了这个问题:Foofoo;//ForgetthisFoo&foo()//Dothisinstead{//Useptr,notreference,toavoiddestructionorderproblemsstaticFoo*ptr=newFoo();return*ptr;}但是,我一直在搜索,Windows(我的平台)似乎不保证局部静态的线程安全,尽管它确实为全局静态提供了这种保证。因此,如果我将我的对象设为全局对象,我可以获得线程安全性,但我有初始