模拟一个函数,该函数像操作员=和破坏者一样传播到每个字段
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 技巧来创建/模拟具有如此酷功能的自定义功能?
如果否,这是一个完整的答案。
如果是,请显示演示;我相信这应该是一个免费的功能,例如: -
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
应用于其每个成员"。
禁止您在各种情况下必须做很多次,这是不值得的。
简而言之,不,不是。但是也许有很多工作。
相关文章:
- JavaScript箭头函数:我们能否像C ++ lambdas一样捕获值
- 函数返回动态强制转换的指针,返回指针,就好像它根本没有被转换一样
- 为什么向量不支持 size 作为成员变量,就像 Java 类中的长度变量一样,而是函数 size()?
- 'inline'变量可以像内联函数一样内联吗?
- C++11: 如何编写一个像 Get 一样工作的模板函数<tuple>...但是收到参数包?
- 将参数传递给成员函数,就像使用 std::cout 一样
- 如何创建像标准库头一样的头,以便在不链接头中函数的所有对象文件的情况下编译程序?
- 模拟一个函数,该函数像操作员=和破坏者一样传播到每个字段
- 可变参数函数并复制粘贴这些参数(就像我们在宏中一样)
- 如何像函数一样调用构造函数
- 我多么应该将空指针传递给c ++函数,就像C#中的IntPter.Zero一样
- 模板成员变量像通用函数一样键入
- 可以像'funs[1]();'一样调用的函数数组
- 如何在C++中像函数一样存储参数矩阵
- 使用发出与调用信号,就好像它是Qt中的常规函数一样
- 你能像调用成员函数一样调用朋友函数吗?
- 如何像普通 C 函数一样使用正确的 'this' 指针调用 C++ 类成员函数?(指向类成员函数的指针)
- 我能让赋值运算符像复制构造函数一样工作吗
- 如何像传递未定义函数一样传递未定义方法
- c 预处理器 - 如何使C++宏的行为像函数一样