模拟一个函数,该函数像操作员=和破坏者一样传播到每个字段

emulate a function that propagate into every field like operator= and destructor

本文关键字:函数 一样 传播 字段 破坏者 一个 模拟 操作员      更新时间:2023-10-16

据我了解,默认情况下,有一些特殊功能向每个字段成员传播。: -
复制分配,复制构造函数,移动分配,移动构造函数,驱动器等

class B{};
class C{B b;};     
C c1;  C c2;
c1=c2; //<-- automatic invoke B::operator=()

是否可以部署一些C 技巧来创建/模拟具有如此酷功能的自定义功能?

如果否,这是一个完整的答案。
如果是,请显示演示;我相信这应该是一个免费的功能,例如: -

class A{};
class B{};
void f(A a){}
class C{public: A a;B b;};     
//no need to code "void f(C c){f(c.a);}"
C c1;  
f(c1);  //<-- automatic invoke f(c1.a), but not invoke f(c1.b)

模板功能 sfinae 可能很有用,但我不知道在这种情况下如何应用。

我认为这对于更多的进步RAII可能很有用。

as_tie

struct C{
  A a;
  B b;
  friend auto as_tie(C& c){
    return std::tie(c.a, c.b);
  }
};

您需要为要以这种方式进行交互的每种类型编写此内容;直到编译时间反射到达C 之前,无法避免这种情况。但是,as_tie制造了==swap等易于实现的东西,因此您可以获得奖励。

之后,foreach培训元素,覆盖对象,Y-Combinators和Invoke-if-if-if-if-Possife的混合物使您能够说"递归地将f应用于其每个成员"。

>

禁止您在各种情况下必须做很多次,这是不值得的。

简而言之,不,不是。但是也许有很多工作。