草庐IT

c++ - 当 CComPtr 作为类的成员变量时如何销毁它?

当CComPtr作为类的成员变量时,如何销毁它?下面是我写的一段代码,m_piControl是成员变量CComPtr。我已将m_piControl的值分配给rpControl和rpControl以供进一步使用。HRESULTCSession::GetInterface(OUTCComPtr&rpControl){if(m_piConSIControl==NULL){CComPtrpConDM;HRESULThResult=GetMaintenance(&pConDM);if(FAILED(hResult))returnhResult;CComQIPtrpMaintenance(pCon

c++ - 从 enable_shared_from_this 返回 self 的 shared_ptr 继承的类的子类

我想知道是否有像这样的伪代码来做一些事情:classA:publicstd::enable_shared_from_this{public:std::shared_ptrgetPtr(){returnstd::static_pointer_cast(shared_from_this());}};classB:publicA{std::vectorcontainer;std::shared_ptraddChild(Achild){container.push_back(child);returngetPtr();}};classC:publicB{public:std::shared_p

c++ - 模板类内部模板类的外部类运算符

我正在尝试为模板类内部的模板类编写外部类模板运算符。我希望下面的片段能解释我的意思。enumMyEnum{};templateclassClassWithTemplateClass{public:templateclassTemplateClass{//...};};当我这样写运算符时:templateautooperator::TemplateClass&a,intb){//...returna;}编译器返回错误:错误:将“operator你能告诉我这个运算符应该怎么写吗? 最佳答案 ClassWithTemplateClass:

c++ - 我可以继承模板类并将类型设置为我当前尝试继承的类的模板化子类吗?

糟糕的标题,我知道。我将举例说明:templatestructMemMapFileHashTable:MemMapFileStructured::kvp>{structkvp{uint32_tkey;ValTypeval;};MemMapFileHashTable(constchar*fileName,boolwrite=false,int64_tchunkB=65536):MemMapFileStructured(fileName,write,chunkB){}};所以我的想法是,我创建一个具有特定ValType的哈希表,该哈希表又具有具有特定ValType的kvp。要使用我正在继承

c++ - 模板类的友元函数中的链接错误

我有模板类节点,为了遵循copy-and-swap我正在尝试编写swap函数,它是Node类的friend我的代码是:Node.h#ifndefNODE_H#defineNODE_H#includetemplateclassNode{typedata_;std::unique_ptrnext_;public:Node(typedata);Node(constNode&other);Node&operator=(Nodeother);friendvoidswap(Node&lhs,Node&rhs);};#include"Node.tpp"#endif和Node.tpptemplateN

c++ - 将继承自某个类的所有类加为好友

这与其说是一个实际问题,不如说是一种求知欲。我想知道在C++中是否有一种方法可以执行以下操作:让A成为一个类。我想使B类与继承自A的所有类成为friend。先说再说:我明明知道友情是不能遗传的。我想做的是制作一个templatefriend声明,也许使用SFINAE,将B与每个类C交友,以便C继承自A。这样的事情有可能吗?我试图从最简单的情况开始:你能和所有其他类(class)交friend吗?显然我知道这没有任何意义,可以将事情公开,但也许从这个起点开始可以完善事情以仅选择那些继承自A的类。 最佳答案 解决方法是使用继承的“key

c++ - 匿名命名空间中模板化类的友元

声明类时A作为类(class)的friendB,而A在匿名命名空间和B中定义在外部,一些编译器会产生错误“protectedmemberinaccessible”,而其他编译器不会产生任何错误或警告。如果A或B或者两者都是模板:namespace{templatestructA{templatevoidfoo(BBconst&b){b.bar();}};}//endanonymousnamespacetemplateclassB{templatefriendstructA;protected:voidbar()const{}};intmain(){Aa;a.foo(B{});}A和B都

属于模板类的成员模板的 C++ 显式特化

在目前的C++标准草案中,thisparagraph中就有这个例子属于与模板的显式特化相关的部分:templatestructA{voidf(T);templatevoidg1(T,X1);templatevoidg2(T,X2);voidh(T){}};//specializationtemplatevoidA::f(int);//outofclassmembertemplatedefinitiontemplatetemplatevoidA::g1(T,X1){}//membertemplatespecializationtemplatetemplatevoidA::g1(int,X

c++ - 传入指定类的成员变量

我想传入一个成员变量的名字。我以为我可以做到这一点templatevoidSetVal(T::*newval){};这显然行不通,但希望能理解我正在尝试做的事情。我希望能够设置模板类的某个成员变量。 最佳答案 您始终可以将编译定义的常量作为模板参数。所以这里是:templateR&SetVal(T&t,constR&value){t.*member=value;returnt.*member;}structA{inta;};intmain(){Aa;SetVal(a,10);return0;}

c++ - 是否有类似 Filestorage 类的东西来存储文件?

是否有类似类的东西可以用来存储文件和目录,就像Zip文件的使用方式一样?因为我还没有找到任何“真正的”类来编写Zip文件(真正的类,如真正的类),如果能够将文件和目录存储在类似容器的文件中,那就太好了。一个完美的API可能是这样的:intmain(){ContainerFilecntf("myContainer.cnt",ContainerFile::CREATE);cntf.addFile("data/some-interesting-stuff.txt");cntf.addDirectory("data/foo/");cntf.addDirectory("data/bar/",Co