use*_*536 0 c++ copy-constructor
由编译器为未定义自己的类合成的默认复制构造函数是正确的:它将所有成员从一个对象复制到另一个对象.
我想做类似的事情.我想写一个方法
template <typename T>
T f(const T& obj) {
// for each member var i of obj, I want to call some method g(obj.i)
}
Run Code Online (Sandbox Code Playgroud)
现在我不知道成员变量的名称是什么.如果这是复制构造函数,我可以调用赋值运算符而不是g.
很明显,编译器会这样做(但也许它会在推断出类成员的名称之后执行此操作).是否有可能为任何T级课程做到这一点?
编译器有一些代表每个类的内部数据结构.在合成复制构造函数时,它可以参考这个结构,以便弄清楚它需要发出什么代码(多少个副本,每个副本如何完成,以及成员的地址与源相关的内容)和目标对象地址).
作为一名C++程序员,您无法访问此内部编译时数据结构,因此您运气不佳.你基本上必须列出成员,并希望你不要留下任何东西.
也许你可以做的工作,预处理器(或者如果没有的预处理,然后一个预处理器),标注与您可以用它来生成一个呼叫为每个成员的名单额外信息的结构定义.