在对象方法之间切换的惯用方式

问题描述 投票:0回答:1

在我的 C++ 程序中,我有多个实例试图在给定

std::string name
的情况下查找某些属性。
有时我需要在类方法中查找这些属性之一,而我需要查找的属性是类成员之一的方法,例如:

struct Bar {
  SomeClass obj;
  int doSomething(std::string input) {
    if (input == "a") {
      return obj.a();
    } else if (input == "b") {
      return obj.b();
    }
    ...
  }
}

我无法修改

SomeClass
的定义。

我的代码的其他部分有很多类似的实例,但它们只是返回整数,而不需要调用另一个方法。

我的问题如下:实现此目的以避免一堆条件语句使代码混乱的最佳实践方法是什么?

c++
1个回答
0
投票

尽管我倾向于同意 @DevSolar 的评论,即这似乎是一个 XY 问题,但一种选择是将字符串键映射到函数指针,如下所示:

struct Bar {
  SomeClass obj;
  std::map<std::string, int (*)()> methodMap = {
      {"a", &SomeClass::a},
      {"b", &SomeClass::b},
  };

  int doSomething(std::string input) {
    if (methodMap.count(input) > 0) {
      return methodMap[input](obj);
    } else {
      return -1;
    }
  }
};

请注意,

else { return -1; }
块用于处理未映射的“字符串”(键)。

© www.soinside.com 2019 - 2024. All rights reserved.