草庐IT

派生词

全部标签

c++派生类型的自动工厂注册

像我之前的许多人一样,我正在尝试让我的派生类型自动注册到我的工厂。我通读了许多问题,并试图专注于我在那里没有找到的内容。除了自动注册之外,我的一切都运行良好。我的目标:自动注册我的基类Base的任何派生类仅我标记为可注册的类(class)不仅是Base的直接子类例如:底座->设备->摄像头->网络摄像头这将使使用CRTP如thisquestion中所述难对我想要注册的类(class)进行最小的更改-假人证明宁愿使用注册器类而不是宏喜欢thisquestion,但我不确定这是否取决于CRTP我有什么:templateclassabstract_factory{public:templat

c++ - 用派生类的类型覆盖函数参数类型

我计划创建一个接口(interface)(而不是C++中的虚拟基类),其方法采用自己类型的参数。classBase{public:virtualvoidseriousMethod(constBase&arg)=0;}然而,派生类不应接受基类类型的参数,而是派生类类型的参数。classDerived:publicBase{public:virtualvoidseriousMethod(constDerived&arg){/*...*/}}我怎么会意识到这一点?我是否必须对基类进行模板化(例如Base)还是有更清洁的解决方案? 最佳答案

c++ - 用派生类的类型覆盖函数参数类型

我计划创建一个接口(interface)(而不是C++中的虚拟基类),其方法采用自己类型的参数。classBase{public:virtualvoidseriousMethod(constBase&arg)=0;}然而,派生类不应接受基类类型的参数,而是派生类类型的参数。classDerived:publicBase{public:virtualvoidseriousMethod(constDerived&arg){/*...*/}}我怎么会意识到这一点?我是否必须对基类进行模板化(例如Base)还是有更清洁的解决方案? 最佳答案

C++ CRTP 和从基访问派生的嵌套类型定义

编辑:当我为任何感兴趣的人更改我的设计时,我会在此处放置一个github链接。背景我正在替换boost::intrusive,intrusive_set,我自己的实现是64位编译的侵入集,将3x8字节的指针填充到我的容器节点中。我的容器有2^16个节点的限制,因此我可以使用2x16位偏移序数将其降低到每个节点4字节(大小减少6倍)。在下面的示例中base是侵入集容器。derived类有std::vector>.显然,在这种间接级别下,我需要在派生中拥有一堆嵌套的typedef,我想在base中引用它们。ps,容器用于数据描述语言的AST。因此,包含的元素是小型数据类型,并且3x8字节非

C++ CRTP 和从基访问派生的嵌套类型定义

编辑:当我为任何感兴趣的人更改我的设计时,我会在此处放置一个github链接。背景我正在替换boost::intrusive,intrusive_set,我自己的实现是64位编译的侵入集,将3x8字节的指针填充到我的容器节点中。我的容器有2^16个节点的限制,因此我可以使用2x16位偏移序数将其降低到每个节点4字节(大小减少6倍)。在下面的示例中base是侵入集容器。derived类有std::vector>.显然,在这种间接级别下,我需要在派生中拥有一堆嵌套的typedef,我想在base中引用它们。ps,容器用于数据描述语言的AST。因此,包含的元素是小型数据类型,并且3x8字节非

c++ - 如何在不从 QObject 派生的情况下使用 SIGNAL 和 SLOT?

或其他方式来表达我的问题(虽然它没有解决我的问题):'QObject::QObject'cannotaccessprivatememberdeclaredinclass'QObject'我的类(class)需要SIGNAL和SLOTS功能,但我认为不从QObject派生就不可能?classMyClass{signals:importantSignal();publicslots:importantSlot();};问题似乎是我需要从QObject派生来使用信号和槽……但我需要MyClass的默认构造函数。但由于QObject的以下特性,我无法构造它们:NoCopyConstructor

c++ - 如何在不从 QObject 派生的情况下使用 SIGNAL 和 SLOT?

或其他方式来表达我的问题(虽然它没有解决我的问题):'QObject::QObject'cannotaccessprivatememberdeclaredinclass'QObject'我的类(class)需要SIGNAL和SLOTS功能,但我认为不从QObject派生就不可能?classMyClass{signals:importantSignal();publicslots:importantSlot();};问题似乎是我需要从QObject派生来使用信号和槽……但我需要MyClass的默认构造函数。但由于QObject的以下特性,我无法构造它们:NoCopyConstructor

c++ - 以编程方式获取派生类的名称

我正在尝试做类似的事情:classBase{public:Base(){cout问题是,当我需要查看Derived和MoreDerived时,我总是将Base打印到屏幕上。有没有办法让typeid以这种方式与派生类一起工作?或者除了typeid还有别的办法吗?注意:我正在向已编码的套件添加功能,因此我不想在派生类自己返回此值的基类中添加虚拟方法。另外,不用担心运行时开销,这将是调试编译开关的一部分。 最佳答案 在构造函数Base()中,对象仍然是一个“Base”实例。它将在Base()构造函数之后成为Derived实例。尝试在构造之

c++ - 以编程方式获取派生类的名称

我正在尝试做类似的事情:classBase{public:Base(){cout问题是,当我需要查看Derived和MoreDerived时,我总是将Base打印到屏幕上。有没有办法让typeid以这种方式与派生类一起工作?或者除了typeid还有别的办法吗?注意:我正在向已编码的套件添加功能,因此我不想在派生类自己返回此值的基类中添加虚拟方法。另外,不用担心运行时开销,这将是调试编译开关的一部分。 最佳答案 在构造函数Base()中,对象仍然是一个“Base”实例。它将在Base()构造函数之后成为Derived实例。尝试在构造之

c++ - 如何在 C++ 中的派生类的构造函数中初始化基类的 const 变量?

我有一个没有构造函数的抽象C++类。它应该是一个基类,以便其他类可以继承它。我要做的是在基类中声明一个常量变量并在每个派生类的构造函数中初始化它,但在每个类中都没有。它在C++中合法吗?如果是这样,我该怎么做? 最佳答案 IsitlegalinC++?没有。常量必须在基类构造函数中初始化。解决方案是在您的基类中提供适当的构造函数——否则无法使用。此外,没有理由不提供该构造函数。classBase{intconstconstant;public:virtual~Base()=0;//Makesthisanabstractbasecla