草庐IT

c++ - 如何将模板混合作为参数?

考虑到C++模板混入结构,我如何编写一个函数来接收特定组件的混入?在这个例子中,我怎么给withAandB至worksWithA()?structBase{};templatestructHasA:T{intA;};templatestructHasB:T{intB;};voidWorksWithA(HasA&p){p.A++;}voidWorksWithAandB(HasA>&p){p.A++;p.B++;}int_tmain(intargc,_TCHAR*argv[]){HasAwithA;HasA>withAandB;WorksWithA(withA);//OKWorksWith

c++ - 我应该更喜欢 mixin 还是函数模板来为一组不相关的类型添加行为?

Mixins和函数模板是为多种类型提供行为的两种不同方式,只要这些类型满足某些要求即可。例如,假设我想写一些代码,允许我将一个对象保存到一个文件中,只要这个对象提供一个toString成员函数(这是一个相当愚蠢的例子,但请耐心等待)。第一个解决方案是编写如下函数模板:templatevoidtoFile(Tconst&obj,std::stringconst&filename){std::ofstreamfile(filename);file另一种解决方案是使用混入,使用CRTP:templatestructToFile{voidtoFile(std::stringconst&file

c++ - C++ 中带有混合插件的奇怪循环继承

这里有什么好的解读循环继承的方法?classNode{//...public:listneighbors(){/*...*/}voidupdate(){}}templateclassHasImportance:publicvirtualNodeType{doublem_importance=0.0;public:voidreceive_importance(doubleimp){/*...*/}voidgive_importance(){for(autoneighbor:this->neighbors())neighbor->receive_importance(m_importanc

C++ 可克隆混合

我有几个类需要以下clone待定义函数:structBase{virtualBase*clone()const=0;};structA:publicBase{Base*clone()const{returnnewA(*this);}};structB:publicBase{Base*clone()const{returnnewB(*this);}};structX:publicBase2{Base2*clone()const{returnnewX(*this);}};我正在尝试使用Cloneablemixin来避免这种冗余代码:templateclassCloneableMixin{p

c++ - 如何覆盖另一个基类中的函数?

我不太确定要使用的术语,但这是我的示例:classBase{public:virtualvoidtest()=0;};classMixin{public:virtualvoidtest(){}};classExample:publicBase,publicMixin{};intmain(intargc,char**argv){Exampleexample;example.test();return0;}我希望我的Mixin类实现纯虚函数Base::test,但是当我编译它时,它说:test.cpp:Infunction‘intmain(int,char**)’:test.cpp:15:

c++ - 混合术语

在经典继承中,Derived继承自Base。对于mixin,(技术上的)基类通常称为Mixin。从Mixin继承的(技术)类的正确术语是什么?我想知道这一点,以便我可以相应地命名我的模板参数。 最佳答案 mixin类的使用是一个实现细节,它不会像典型继承树中的基/派生关系那样直接影响结果,所以我不确定它是否值得拥有自己的名字。有一次我最成功地使用它,因为已经需要一个现有的基类(MFC的CDialog),所以使用了多重继承,我的mixin不是列表中的第一个。如果您真的必须选择一个名称,Derived可能和任何名称一样好。

c++ - 重用 copy-and-swap 习惯用法

我正在尝试将copy-and-swap习惯用法放入可重用的混音中:templatestructcopy_and_swap{Derived&operator=(Derivedcopy){Derived*derived=static_cast(this);derived->swap(copy);return*derived;}};我打算通过CRTP将其混入:structFoo:copy_and_swap{Foo(){std::cout然而,一个简单的测试表明它不起作用:Foox;Fooy;x=y;这只会打印两次“default”,既不会打印“copy”也不会打印“swap”。我在这里缺少什

java traits 还是 mixins 模式?

有没有办法在Java中模拟混入或特征?基本上,我需要一种实现多重继承的方法,这样我就可以将通用业务逻辑添加到多个类中 最佳答案 不是你想要的方式。EffectiveJava建议您“优先考虑组合而不是继承”。这意味着您将通用逻辑移至其他类并委托(delegate)。这就是你如何解决java中缺少多重继承的问题。 关于javatraits还是mixins模式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

用于 __str__ 和方法解析顺序的 Python Mixin

我发现我用Python编写的许多类都包含一小组变量,我实际上希望在调用str()时看到这些变量,并且重写__str__(self)foreach相当麻烦。因此,我编写了以下mixin,classStrMixin(object):'''Automaticallygenerate__str__and__repr__'''def__str__(self):importtypesname=self.__class__.__name__+':'attrs=['{}={}'.format(k,v)for(k,v)inself.__dict__.items()]returnname+','.join

python - 可以使用 MRO 来覆盖混入吗?

问题描述:我有一个类C继承自mixinA和B。我想要一个新类C_,它具有类C中定义的所有方法/属性,但B与B_(相同的API)在继承方案中(一种可能的用法是简单的模拟)。所有类都是新样式类。我通过打乱继承顺序得到了我想要的东西,因此MRO:ABB_B_AB\//\\/C/\C\/\/C1C2C1(C,B_)C2(B_,C)C1.__mro__=(C1,C,A,B,B_,object)C2.__mro__=(C2,B_,C,A,B,object)C2方法(在C类之前继承修改后的mixin)工作没有太多惊喜,如果我调用B中定义的方法>mixin,选择了B_的定义。目前它有效,但我觉得:“祈