【问题标题】:How to assign variables with the same names more effectively in C++?如何在 C++ 中更有效地分配具有相同名称的变量?
【发布时间】:2020-07-28 14:45:30
【问题描述】:

例如,我有课:

class SimpleClass
{
  int fieldOne;
  int fieldTwo;
  int fieldThree;
}

我的代码的某些部分需要将此变量复制到自己的字段中,但有一件事是我想分配相同的命名变量

void AnotherClass::copyFields(SimpleClass& buf)
{
     fieldOne = buf.fieldOne;
     fieldTwo = buf.fieldTwo;
     fieldThree = buf.fieldThree;
}

如您所见,我只是填充了相同的命名变量。我可以使用这个“同名”功能而不重写变量名而是实现一些映射并简化这样的分配吗?

【问题讨论】:

  • 如果您有两种不同类型的字段具有相同的字段,那么您的设计就有漏洞。修好它,否则你将永远抽水,

标签: c++ mapping variable-assignment


【解决方案1】:

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

配文:

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++ 中没有自动迭代类成员的方法。

【讨论】:

  • 作文的例子并没有完全回答这个问题。 SimpleClass 成员现在必须通过中间 f 成员访问,这并不总是可以接受的。至于一般的“设计气味”评论,也有一些必须这样做的有效情况(最直接的 - 两个结构都在开发人员的控制之外)。
  • @SergeyA 嗯嗯,这就是为什么我开始建议改变设计,但这只是一个廉价的借口;)
  • 我认为,这确实是 C++ 委员会多年来未能提供编译时反射的失败。
  • @SergeyA 感谢您同意这不是我的错。抱歉,开个玩笑,我试图找到一种方法,但我认为使用实际上比原始输入更少的东西是不可能的。第一个想法是成员指针,但&A::foo&B::foo 无关
  • 是的,没有办法。这确实是一种耻辱。我可以永远抱怨它。
猜你喜欢
  • 2011-01-12
  • 2020-12-09
  • 2011-04-14
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多