C++ 如何在C+中更有效地分配同名变量+;?

C++ 如何在C+中更有效地分配同名变量+;?,c++,mapping,variable-assignment,C++,Mapping,Variable Assignment,例如,我有一个类: class SimpleClass { int fieldOne; int fieldTwo; int fieldThree; } 我的代码的某些部分需要将这个变量复制到自己的字段中,但有一件事是我想分配相同的命名变量 void AnotherClass::copyFields(SimpleClass& buf) { fieldOne = buf.fieldOne; fieldTwo = buf.fieldTwo; fiel

例如,我有一个类:

class SimpleClass
{
  int fieldOne;
  int fieldTwo;
  int fieldThree;
}
我的代码的某些部分需要将这个变量复制到自己的字段中,但有一件事是我想分配相同的命名变量

void AnotherClass::copyFields(SimpleClass& buf)
{
     fieldOne = buf.fieldOne;
     fieldTwo = buf.fieldTwo;
     fieldThree = buf.fieldThree;
}
如您所见,我只填充相同的命名变量。我可以使用这个“同名”功能,而不是重写变量名,而是实现一些映射并简化这种分配吗?

有几种方法可以“修复”您的设计,这样您就不需要手动分配成员:继承、组合,或者这两个类实际上是一个相同的类

组成:

struct fields {
    int fieldOne;
    int fieldTwo;
    int fieldThree;
};

struct SimpleClass {
    fields f;
};

struct AnotherClass {
    fields f;
    void copyFields(const SimpleClass& s) {
        f = s.f;
    }
};
如果这不是一个选项,我认为除了使用宏之外没有其他方法,但是您仍然需要键入几乎相同数量的代码:

void AnotherClass::copyFields(SimpleClass& buf)
{
     ASSIGN(fieldOne,buf);
     ASSIGN(fieldTwo,buf);
     ASSIGN(fieldThree,buf);
}

C++没有反射,所以在C++中没有一个自动迭代类成员的方法。

有几种方法来修复你的设计,这样你就不需要手动分配成员:继承、组合或者这两个类实际上是同一个。 组成:

struct fields {
    int fieldOne;
    int fieldTwo;
    int fieldThree;
};

struct SimpleClass {
    fields f;
};

struct AnotherClass {
    fields f;
    void copyFields(const SimpleClass& s) {
        f = s.f;
    }
};
如果这不是一个选项,我认为除了使用宏之外没有其他方法,但是您仍然需要键入几乎相同数量的代码:

void AnotherClass::copyFields(SimpleClass& buf)
{
     ASSIGN(fieldOne,buf);
     ASSIGN(fieldTwo,buf);
     ASSIGN(fieldThree,buf);
}

C++没有反射,所以在C++中没有一种自动迭代类成员的方法。

这个构图的例子不能很好地回答这个问题。code>SimpleClass成员现在必须通过中间
f
成员访问,这并不总是可以接受的。至于一般的“设计气味”评论,也有一些有效的情况下,一个人必须这样做(最简单的-两个结构都超出了开发人员的控制)。@SergeyA hum true,这就是为什么我开始建议更改设计,但这只是一个廉价的借口;)我认为,这真的是C++委员会未能为这些年提供编译时间的反映。@谢尔盖亚感谢同意这不是我的错。对不起,只是开玩笑,我试图找到一种方法,但我认为这是不可能的东西,实际上是少键入比原始。第一个想法是成员指针,但是
&A::foo
&B::foo
没有关系是的,没有办法。这真是一种耻辱。我可以滔滔不绝地说下去。这个作文的例子并不能完全回答这个问题
SimpleClass
成员现在必须通过中间
f
成员访问,这并不总是可以接受的。至于一般的“设计气味”评论,也有一些有效的情况下,一个人必须这样做(最简单的-两个结构都超出了开发人员的控制)。@SergeyA hum true,这就是为什么我开始建议更改设计,但这只是一个廉价的借口;)我认为,这真的是C++委员会未能为这些年提供编译时间的反映。@谢尔盖亚感谢同意这不是我的错。对不起,只是开玩笑,我试图找到一种方法,但我认为这是不可能的东西,实际上是少键入比原始。第一个想法是成员指针,但是
&A::foo
&B::foo
没有关系是的,没有办法。这真是一种耻辱。如果你有两个不同类型的字段,那么你的设计就有一个漏洞。修复它,否则你将永远抽水,如果你有两个不同类型的相同的领域,那么你的设计有一个洞。修好它,否则你将永远抽水,