[英]Copy all members from a struct to another struct
在C ++中,我有兩個結構(假定所有成員都是公共的):
struct A{
t1 d1;
t2 d2;
t3 d3;
...
t100 d100;
};
struct B{
t7 d7;
t3 d3;
t5 d5;
};
B中的成員是A成員的子集。
現在,我需要一個函數將所有成員從B復制到A:
func(A a, B b) {
a.d7 = b.d7;
a.d3 = b.d3;
a.d5 = b.d5;
}
在不顯式列出所有B
成員的情況下,實現func
的優雅方法是什么? 給定A
是固定的,不能修改。
如果允許您更改A,則可以表示A和B之間的結構關系:
A可以從B繼承,如果A實際上是B的一種。則可以從A刪除公共元素(因為它們是從B繼承的)。
A可以讓B成員替換常見元素。
在這種情況下,您可能會喜歡使用=
(在第一種情況下,您將有意使用切片,在第二種情況下,這將是干凈的分配)。
如果您無法表達結構關系,則沒有通用的安全方法,但可以像列出的那樣分配工作。
您不應該考慮使用memcopy()方法或類似方法,因為不能確保元素具有相同的對齊方式。 如果它不是POD元素,則可能導致未定義的行為(內存泄漏,損壞,虛擬功能表損壞等)。
您給出的示例:
func(A a, B b) {
a.d7 = b.d7;
a.d3 = b.d3;
a.d5 = b.d5;
}
看起來是宏的好地方:
func(A a, B b) {
#define c(f) a.f = b.f
c(d7);
c(d3);
c(d5);
#undef c
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.