草庐IT

generic-derivation

全部标签

c++ - 在基本 ctor-initialiser 中将其强制转换为 `Derived*` 是否合法?

给出以下CRTP示例:templateintfoo(T*const){return0;}templatestructBase{Base():bar(foo(static_cast(this)){};intbar;};structDerived1:Base{};是this的转换至Derived*这里有效吗?我似乎记得可能不是,但现在找不到具体的证据。this的“自然”类型在这个阶段是Base*const,并且在某些情况下,甚至可以静态转换this初始化期间的指针不正常,例如在基础构造完成之前向上转换(12.7/3)。@DeadMG说:there'sanexplicitexceptioni

c++ - "Generic"C++ 中的迭代器

我有:voidadd_all_msgs(std::deque::iterator&iter);如何使该函数“通用”,以便它可以采用任何类型的输入迭代器?我真的不在乎它是否在迭代双端队列、vector或其他东西,只要迭代器正在迭代消息。-这在C++中是不是很简单? 最佳答案 templatevoidadd_all_messages(Iteratorfirst,Iteratorlast)用法:vectorv;add_all_messages(v.begin(),v.end());你需要指定结束,否则你不知道什么时候停止!它还为您提供了仅

c++ - 在标准中,什么是 "derived-declarator-type"?

在C++(C++11)标准的不同地方,声明是根据derived-declarator-type-list来描述的。我正在研究右值引用,在这种情况下使用这个术语是至关重要的(第8.3.2节):InadeclarationTDwhereDhaseitheroftheforms    &attribute-specifier-seqoptD1    &&attribute-specifier-seqoptD1andthetypeoftheidentifierinthedeclarationTD1is“derived-declarator-type-listT,”thenthetypeofth

c++ - static_cast<Derived *>(Base pointer) 是否应该给出编译时错误?

static_cast(Basepointer)是否应该给出编译时错误?classA{public:A(){}};classB:publicA{public:B(){}};intmain(){A*a=newA();B*b=static_cast(a);//CompileError?} 最佳答案 它不会给出编译时错误,因为Base-Derived关系可以在运行时存在,具体取决于被强制转换的指针的地址。static_cast总是成功,但如果你不转换为正确的类型,则会引发undefined-behavior。dynamic_cast可能会

c++ - 为什么不允许从 VirtualBase::* 转换为 Derived::*?

昨天,我和我的同事不确定为什么语言禁止这种转换structA{intx;};structB:virtualA{};intA::*p=&A::x;intB::*pb=p;连类型转换都没有帮助。如果基成员指针是虚拟基类,为什么标准不支持将基成员指​​针转换为派生成员指针?相关C++标准引用:Aprvalueoftype“pointertomemberofBoftypecvT”,whereBisaclasstype,canbeconvertedtoaprvalueoftype“pointertomemberofDoftypecvT”,whereDisaderivedclass(Clause1

c++ - 无法将 "derived"转换为其私有(private)基类 "base"

这个问题在这里已经有了答案:CanIcastaderivedclasstoaprivatebaseclass,usingC-stylecast?(3个回答)关闭7年前。我在尝试创建一个继承自定义纯虚函数的类的类的对象时遇到错误。我不确定出了什么问题。我知道我需要重写派生类中的纯虚函数,但它不起作用。我只想重写ProduceItem类中的函数,而不是Celery类,因为我希望Celery类从ProduceItem继承重写的方法。在主要:GroceryItem*cel=newCelery(1.5);//Cannotcast'Celery'toitsprivatebaseclassGroce

python - 如何访问 typing.Generic 的类型参数?

typing模块为泛型类型提示提供了一个基类:typing.Generic类。Generic的子类接受方括号中的类型参数,例如:list_of_ints=typing.List[int]str_to_bool_dict=typing.Dict[str,bool]我的问题是,如何访问这些类型参数?也就是说,给定str_to_bool_dict作为输入,我怎样才能得到str和bool作为输出?基本上我正在寻找这样的功能>>>magic_function(str_to_bool_dict)(,) 最佳答案 Python>=3.8从Pyth

javac错误: inconvertible types with generics?

还有其他几个SO问题谈论泛型编译OKw/Eclipse的编译器而不是javac(即Java:GenericshandleddifferenltyinEclipseandjavac和GenericscompilesandrunsinEclipse,butdoesn'tcompileinjavac)——但这看起来有点不同。我有一个enum类:publicclassLogEvent{publicenumType{//...valueshere...}...}我有另一个类,它的方法接收从Enum继承的任意类型的对象:@Overridepublic>voidpostEvent(Contextco

java - 错误 : Generic Array Creation

这个问题在这里已经有了答案:HowtocreateagenericarrayinJava?(31个回答)关闭8年前。我不明白GenericArrayCreation的错误。首先我尝试了以下方法:publicPCB[]getAll(){PCB[]res=newPCB[list.size()];for(inti=0;i然后我尝试这样做:PCB[]res=newPCB[100];我一定错过了一些看起来正确的事情。我试着查了一下,我真的做到了。什么都没有点击。我的问题是:我能做些什么来解决这个问题?错误是:.\Queue.java:26:genericarraycreationPCB[]res

Java 泛型 - Make Generic 扩展 2 个接口(interface)

你是如何做到这一点的:publicclassFrankenstein{}不做publicinterfaceWeirdoextendsIhuman,IMonster{}编辑为什么这不起作用?publicvoidmapThis(Class>key,Classvalue){}我收到编译器消息标记Class作为错误。 最佳答案 Reimeus已经指出,您在编辑中要求的内容是不可能的。我只是想详细说明一下原因。有人会认为您可以使用以下内容:publicvoidmapThis(Class>key,Classvalue){...}事实上,当我第一