模拟传播到每个字段的函数,如 operator= 和 destructor

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

据我了解,默认情况下有一些特殊函数会传播到每个字段成员。 :-
复制赋值、复制构造函数、移动赋值、移动构造函数、析构函数等

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

是否可以将一些 C++ 技巧部署到 create/emulate 具有如此酷炫功能的自定义函数?

如果没有,则为完整答案。
如果是,请展示演示;我相信它应该是一个免费的功能,例如:-

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)

Template functionSFINAE 可能有用,但我不知道如何在这种情况下应用。

我认为它可能对一些更高级的 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-tuple-element、override set objects、y-combinators 和 invoke-if-possible 的组合使您能够说 "recursively apply f to each of its members".

除非您必须在各种情况下多次执行此操作,否则不值得。

简而言之,不,不是真的。但也许需要做很多工作。