草庐IT

c++ - 模板化类的特殊继承导致成员函数返回模板化类类型而不是继承类类型

假设我有一个这样的基类:templateclassBase{public:Base&operator()(constT&value){this->value=value;return*this;}Tvalue;};现在我想继承这个类来创建特定于类型的类classInheritedFloat:publicBase{}inheritedFloat;现在我尝试在一个函数中捕捉这个继承:voidfunction(constInheritedFloat&inherited){std::cout像这样调用这个函数当然没问题:intmain(){function(inheritedFloat);//

c++ - 如何在不创建实例的情况下获取类的方法成员的类型?

假设我们有:templatevoidfoo(std::vector&t){autovar=T();std::vectorarray;}在上面的代码中,创建了一个数组。该数组的类型是Get()的返回值。我们通过创建类型T的虚拟变量然后使用decltype推断Get的返回类型来找到该值。这可行,但是它需要创建一个无用的虚拟变量。相反,我们可以这样做:templatevoidfoo(std::vector&t){autovar=t[0];std::vectorarray;}这不会创建任何虚拟对象,但是这可能会崩溃,因为我们不能保证数组至少包含一个元素。有没有一种方法可以在不创建虚拟对象的情况

c++ - 有没有办法找出一个类是否是另一个类的直接基础?

我想知道是否有一种方法可以查明一个类是否是另一个类的直接基础,即在Boost类型特征术语中是is_direct_base_of函数。据我所知,Boost似乎不支持这种功能,这使我认为当前的C++标准是不可能的。我想要它的原因是对用于反射系统的两个宏进行一些验证检查,以指定一个类派生自另一个类,如下面的示例代码所示。标题.h:#defineBASEA#defineDERIVEDBclassA{};classB:publicA{#include};rtti.h://Iwanttocheckthatthetwomacro'sarecorrectwithacompiletimeassertRt

c++ - 在类方法内部访问类的命名空间之外?

我有一个正在使用的header资源,它定义了一个名为typedefstruct{...}Mii;现在,在我自己的程序中,我正在编写一个包装类,它在内部私下使用这个结构来进行它自己的操作,所以我将我的类放在我的程序的命名空间中以避免冲突。namespaceCMii{classMii{...voiddoSomething();};}现在,我可以通过CMii::Mii引用我的包装类。现在,在doSomething的实现中:voidCMii::Mii::doSomething(){Miim;...}编译器认为我指的是CMii::Mii。我如何告诉编译器我想使用该结构?

c++ - 具有指针数组 C++ 的类的析构函数

如果我有一个包含指向另一个类Vehicle的指针数组的类:classList{public://stuffgoeshereprivate:Vehicle**vehicles;}如果我现在编写List类的析构函数,我是否手动遍历数组(我知道数组中有多少项)并删除每个指针到车辆,还是C++会自动调用数组中所有车辆的析构函数?(如果类中有一个私有(private)字符串/...,或者如果它是Vehicle指针的STL容器,就像它所做的那样)编辑:我忘记了delete[]vehicles,但如果我这样做,它会同时删除数组中所有车辆使用的内存,还是只删除指针使用的内存?

c++ - 模板化类的方法是否隐含内联链接?

模板化类的方法是否隐含了内联链接(不是谈论内联优化),还是只是模板化方法?//A.htemplateclassA{public:voidfunc1();//#1virtualvoidfunc2();//#2templatevoidfunc3();//#3};templatevoidA::func1(){}//#1templatevoidA::func2(){}//#2templatetemplatevoidA::func3(){}//#3以上情况都是inline[linkage]吗?(我应该为它们中的任何一个显式地编写inline吗)? 最佳答案

c++ - 使用来自可变参数模板类的特定参数调用函数

templateclassMessage{public:Message(Args&&...args){mArgs=std::make_tuple(args...);}std::tuplemArgs;typedefstd::functionHandlerType;voidConsume(HandlerTypehandler){//handler(mArgs);//Howdoesoneunpackthis?}};//TestingcodeMessagemsg(1,2);msg.Consume([](inti,intj){std::cout我正在尝试一个简单的消息传递API,试图为消息和参数

c++ - 在使用它的类的构造函数中初始化 std::array 的大小

是否可以使用std::array作为类的私有(private)属性,但在类的构造函数中初始化其大小?classRouter{std::arrayports;//Idontknowhowmuchportsdowillthishavepublic:Switch(intnumberOfPortsOnRouter){ports=std::arrayports;//nowIknowithas"numberOfPortsOnRouter"ports,buthowtotellthe"ports"variable?}}我可能会使用一个指针,但没有它也能做到吗? 最佳答案

c++ - 如何手动删除类的实例?

如何手动删除类的实例?例子:#include#includeclassCheese{private:stringbrand;floatcost;public:Cheese();//DefaultconstructorCheese(stringbrand,floatcost);//ParametrizedconstructorCheese(constCheese&rhs);//Copyconstrutor~Cheese();//Destructor//etc...otherusefulstufffollows}intmain(){Cheesecheddar("CabotClothboun

c++ - Factory 类的典型 C++ 实现是否存在缺陷?

我需要在C++中实现工厂类,但是当我思考这个问题时,我发现了一个我无法解决的大问题,我发现周围所有的工厂实现示例都存在相同的缺陷方法。可能是我错了,但请告诉我原因。所以这是简单的“典型”工厂实现,它允许我在不更改工厂类的情况下注册新对象。//fruit.hclassFruit{protected:intcount;public:Fruit(intcount):count(count){}virtualvoidshow()=0;};//factory.h/**singletonfactory*/classFactory{typedefFruit*(*FruitCreateFunction