草庐IT

c++ - 如何在 C++ 中正确包含第 3 方开源?

我使用了几个3rd方库,比如boost,我的项目中有一个类,假设它叫做“MyClass”“MyClass”的所有公共(public)函数仅使用标准类型(int、char、string),但私有(private)函数使用来自boost的智能指针和来自其他库的其他算法。所以在我在H文件中编写类(及其函数)的声明之前,我编写了几个包含文件。为了编译项目,我在项目属性中添加了一些额外的包含库。一切正常。问题是,当我想从另一个名为USERPROJECT的项目(该类是外部的)使用此类时,我需要在USERPROJECT项目中包含MyClass.h文件,然后什么都不会编译,因为MyClass.h包含b

c++ - GDB 观察实例 vector 中的类成员

这是我的类(class)的一个极其简化的版本:ClassMyClass{public:intsizeDesired;};我正在创建MyClass的vector主要实例:intmain(intargc,char**argv){std::vectormyvec;for(inti=0;i有一些内存损坏(我认为)错误导致我的程序崩溃。我观察到MyClass::sizeDesired的值程序崩溃时是垃圾。所以,我想在每个MyClass:sizeDesired上设置一个观察点成员,这样我就可以准确地看到这些成员的值何时发生变化。使用GDB,我该怎么做?当我在推送MyClass的所有实例后中断时在s

c++ - std::thread 并在 visual studio 2013 中 move

我有一个只能move的类和一个按值获取此类对象的函数。在新线程中调用函数:voidfoo(MyClassa){}intmain(){MyClassa;std::threadt(&foo,std::move(a));}我得到一个编译器错误,因为缺少MyClass的复制构造函数(我删除了他),如果我实现他,复制构造函数就会被调用。显然这是一个错误,它在gcc中编译时没有复制构造函数。有什么解决方法吗? 最佳答案 如果方法需要a的所有权,通过堆传递它,最好是在shared_ptr中:voidfoo(std::shared_ptra){}[

c++ - 如何使用 doxygen 记录好友注入(inject)功能?

给定如下示例中的一些代码:classMyClass;classInjector{/***@briefMyClassaddition.*/friendMyClassoperator+(MyClassa,MyClassb){...}};classMyClass:privateInjector{};如何让doxygen在MyClass类的文档页面包含operator+()的文档?从功能上讲,它显然属于那里。是否有一些通用方法可以通过ADL提供doxygen文档功能?现实世界中的一个有用示例:我希望doxygen包含boost/operators.hpp中的基类提供的运算符。

c++ - 从函数调用推导模板参数包

我有以下代码,其中有一个模板类和其中的一个类型,我想在单独的模板函数中使用它。templatestructMyClass{enumSomeEnum{value0=-1};};templatestructOtherClass{};templateTcheck(typenameMyClass::SomeEnumvalue){OtherClassobj;Tresult;//calculateresultfromobj;returnresult;}intmain(){autovalue=MyClass::value0;//...intt=check(value);}我相信编译器能够从函数调用中

c++ - 如何实现多线程访问的类锁对象

假设我有以下过度简化的类,并希望保护资源免受多线程访问。我怎样才能像类锁一样合并某些东西,其中每个进入公共(public)接口(interface)的“入口点”首先必须在被允许使用该接口(interface)之前获得一个类锁?classMyClass{public:voidA();voidB();voidC();voidD();voidE();private:SharedResource_res;}voidMyClass::A(){B();C();D();E();}voidMyClass::B(){//dosthwith_res}voidMyClass::C(){//dosthwith

c++ - 字符串的模板参数类型

我有代码:templateclassMyClass{MyClass(){std::cout是否可以编写将模板参数类型作为字符串返回的宏?如果是,如何?例如,MyClassins;//print'int'toconsole 最佳答案 正如其他一些人提到的,您可以使用RTTI做一些事情,但我认为这不是您要找的东西:#include#include#include#defineMY_MACRO(obj)typeid(obj).name()templateclassMyClass{public:MyClass(){Tb;std::couta

c++ - UML 图中的运算符重载

在UML中是否有任何特定的方法来表示运算符重载。例如。我有以下内容:virtualMyClass&operator=(constMyClass&right)=0;我能否假设它可以表示为UML中的普通函数,其中运算符名称为=,输入参数为(constMyClass&right)并且返回类型是MyClass&?.我的假设是否正确? 最佳答案 好吧,我通过回到我的UML大学笔记找到了解决方案:)(此外,我很高兴地确认,经过这么多年,大学笔记仍然非常有值(value),而且总是很好!永远不要扔掉它们)。虚拟被认为是一种刻板印象。操作/函数名称

c++ - 标记为可能丢失 block 的静态指针是否损坏?

在阅读了有关Valgrind的“可能丢失”block消息后,它们似乎很糟糕。我收到静态指针类成员的错误。我想验证我们的代码没有任何问题。我从Valgrind得到这个:==27986==76bytesin1blocksarepossiblylostinlossrecord370of1,143==27986==at0x4C247F0:operatornew(unsignedlong)(vg_replace_malloc.c:319)==27986==by0x107CFEE8:std::string::_Rep::_S_create(unsignedlong,unsignedlong,std

c++ - 带有自定义删除器的 std::shared_ptr 的 Typedef 别名

我想为std::shared_ptr创建别名使用自定义删除器。此代码有效,但仅适用于唯一指针。我收到有关标有[1]的行的无效模板参数数量的错误。我注意到std::unique_ptr的模板和ctor参数和std::shared_ptr与所列不同here和here我注意到这个问题可能与this重复,但我不知道如何解决我的问题#include#includetemplatestructDeleter{voidoperator()(T*p)constnoexcept{p->Drop();//SFINAE};};templateusingmy_unique_ptr=std::unique_pt