草庐IT

c++ - 存储成员函数模板实例时出错

我正在尝试存储指向成员函数模板实例的指针Derived::initialize如下(另请参见rextester.com。为了后代,我创建了一个simplerversion问题。):classBase{public:typedefvoid(Base::*setterFunction)(unsigned);templatestructSetterInterface{staticBase::setterFunctionFunction;};protected:templatevoidsetterImpl(unsigned){}};templateBase::setterFunctionBas

c++ - 如何在 C++ 中针对克隆习惯创建 spy 类

来自Java/PHP世界,我对C++还是个新手。一些用其他语言做的简单事情用C++做起来有点棘手。我的主要问题如下。现在,我有一个类(即“Something”),构造函数为其注入(inject)了虚拟类依赖项(即“Base”的子级)。然后,构造函数将这个注入(inject)的实例存储在unique_ptr中。类字段(使用克隆成语)。这在应用程序级别运行良好,一切似乎都按预期运行。这是示例代码:classBase{public:virtualstd::unique_ptrclone()=0;virtualvoidsayHello()const=0;};classSomething{pub

c++ - 错误 "lambda is not derived from ' std::function'

我正在尝试将lambda传递给通过可变参数模板定义的std::function,但似乎这在gcc上不起作用。有什么原因,为什么这段代码在gcc7.4.0上不起作用,但在VisualStudio2017上却能正常工作?有没有办法让它在gcc上也能工作,而无需先手动将其转换为std::function?#includetemplateintTestFunction(std::function){return0;}voidTest(){autofce=[](int/*n*/,double/*d*/){};//Thisdoesn'tworkwitherrornomatchingfunction

c++ - 继承:将 derived& 作为 arg 传递给期望 base& 的函数

考虑这个示例代码:#includeclassbase{public:base(){std::cout为什么调用base::base(constbase&)没问题,但是调用derived::derived(constbase&)不是?两者都需要一个基本引用,并且都被赋予一个派生引用。我的理解是派生"is"基础。为什么编译器坚持使用derived::derived(constderived&)而它在提供时使用base::base(constbase&)没有问题引用派生类型的对象? 最佳答案 显然,“删除”其中一项默认内容并没有实际完全删

c++ - 基类的未定义模板参数

我很确定我已经在SO的某处阅读了编译器无法处理这段代码的原因,但是,经过几个小时的搜索,我仍然找不到它。相关代码如下:#includetemplateclassbase{};classderived:base{public:structmyStruct{};};intmain(){return0;}问题是解析器首先尝试生成base解析前的特化derived,因此,我收到此错误:“错误C2065:‘myStruct’:未声明的标识符”。作为一个愚蠢的把戏,我注意到如果我预先声明structmyStruct;,VS2010会停止提示。就在classderived之上.在我看来,myStru

c++ - 奇怪的重复出现的模板和模板参数相关的子类化问题

我正在尝试让下面的代码工作templatestructBase{usingDerived=__derived;usingObject=__object;voidfunction(Objecto){returnDerived::function(s);}}//template//structBase{//usingDerived=__derived;//usingObject=typenameDerived::Object;//voidfunction(Objecto){returnDerived::function(s);}//}templatestructDerived:public

c++ - static_pointer_cast<Derived> pReallyABase = static_pointer_cast<Derived>(pBase) 有效!为什么?

这个问题在这里已经有了答案:Downcastingusingthe'static_cast'inC++(3个答案)关闭8年前。我不明白为什么会这样。pReallyABase是一个向下转换的shared_pointer,它指向一个基类实例。我理解为什么编译器让我调用pReallyABase->onlyForDerived()因为我将它定义为派生类指针,但是当我尝试使用该指针调用派生类函数时为什么没有出现运行时错误?classBase{public:virtualstringwhatAmI(){return"IamaBase";}};classDerived:publicBase{publ

c++ - 基于组件的架构 C++

我在想出一种用C++构建基于组件的引擎架构的方法时遇到了麻烦。但是我想不出一种方法来将组件vector与派生自组件的类结合起来。我想覆盖组件虚函数。但是我可以让它调用重写函数的唯一方法是使组件派生类成为一个指针,但我希望每个游戏对象都将自己的组件包含在一个vector中,而不是在类之外作为指针。我尽量删除了不必要的代码。我的结构://GameObjectclass,containscomponentsandotherobjectsclassGameObject{public:GameObject(){}~GameObject(){}voidAddChild(GameObjectchil

c++ - 如何从另一个实例的类型动态实例化一个新实例? C++

我想基于另一个只能在运行时知道类型的对象在堆上创建一个新对象。举个假设的例子,假设我们有一款游戏,用户可以选择一个角色,该角色可以是巫师、战士或治疗师。计算机会创建一个匹配的非玩家角色来对抗玩家。也就是说,如果玩家选择了一个武士,计算机会生成另一个武士实例。我正在尝试使用多态性。说巫师、战士和治疗师都继承自“战斗类型”类我想做的是类似伪代码的事情:combattype*player=new(chosenatruntimetype)();//playercombattype*baseptr=newtypeid(*player);//computer-thisdoesn'twork我知道我

c++ - 以类型安全的方式将指针转换为指针

给定以下代码:classBase{public:virtual~Base()=default;};classDerived:publicBase{};intmain(void){Derivedd;Base*pb=&d;Base**ppb=&pb;Derived**ppd=...;//Canthisbedefinedinatype-safemanner?return0;}是否可以在不引入Derived*类型的中间变量的情况下,为ppd的赋值给出一个类型安全的表达式? 最佳答案 AFAIK,并非没有声明一个指向d的Derived指针。指