哪个更好:显式或无类型 get()?

Which is better: explicit or typeless get()?

假设以下两个版本相同class A:

版本 1

class A
{
   public:
      enum class Retrievable { Integer, String };

      A(): m_integer(123), m_string("string") {}
      ~A() {}

      void* get(const Retrievable r)
      {
         switch (r)
         {
            case Retrievable::Integer:
               return static_cast<void*>(&m_integer);
            case Retrievable::String:
               return static_cast<void*>(&m_string);
            default:
               throw;
         }
      }

   private:
      int m_integer;
      std::string m_string;
};

版本 2

class A
{
   public:
      A(): m_integer(123), m_string("string") {}
      ~A() {}

      int getInteger()        { return m_integer; }
      std::string getString() { return m_string;  }

   private:
      int m_integer;
      std::string m_string;
};

就清晰度、效率和可扩展性而言,这两种范例(单个无类型 get() 函数或单独的显式 get() 函数)哪个更好?

版本 A 无论如何都不会编译,因为不管 C 你会尝试 return 不是 C 的类型(指针 Cstring等)

版本B也许更好,但也退出歪了。除非你正在构建像 JSON 节点之类的多态类型,否则函数应该描述行为,而不是 return 类型。

同样,除非您正在编写一些 JSON class,否则我认为制作一个描述 return 类型而不是行为的函数没有多大意义。 a Person 没有 getHandgetLeg 功能,他有 wave, walk 等功能

表演?我怀疑 getter 会破坏应用程序的性能。

选项 1 将内容转换为 void* 并进行 运行 时间调度,这样速度较慢且不太安全且更难使用。

除非与脚本引擎交互,否则我无法想象使用选项 1 的理由。即便如此,也有许多更好的方法来处理它。提出选项 1 作为选项 2 的替代选择的受访者将强烈不聘用,这会让我重新考虑让受访者走到这一步的漏斗。

总之,方案2更好