哪个更好:显式或无类型 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
的类型(指针 C
是 string
等)
版本B也许更好,但也退出歪了。除非你正在构建像 JSON 节点之类的多态类型,否则函数应该描述行为,而不是 return 类型。
同样,除非您正在编写一些 JSON class,否则我认为制作一个描述 return 类型而不是行为的函数没有多大意义。 a Person
没有 getHand
或 getLeg
功能,他有 wave
, walk
等功能
表演?我怀疑 getter 会破坏应用程序的性能。
选项 1 将内容转换为 void*
并进行 运行 时间调度,这样速度较慢且不太安全且更难使用。
除非与脚本引擎交互,否则我无法想象使用选项 1 的理由。即便如此,也有许多更好的方法来处理它。提出选项 1 作为选项 2 的替代选择的受访者将强烈不聘用,这会让我重新考虑让受访者走到这一步的漏斗。
总之,方案2更好
假设以下两个版本相同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
的类型(指针 C
是 string
等)
版本B也许更好,但也退出歪了。除非你正在构建像 JSON 节点之类的多态类型,否则函数应该描述行为,而不是 return 类型。
同样,除非您正在编写一些 JSON class,否则我认为制作一个描述 return 类型而不是行为的函数没有多大意义。 a Person
没有 getHand
或 getLeg
功能,他有 wave
, walk
等功能
表演?我怀疑 getter 会破坏应用程序的性能。
选项 1 将内容转换为 void*
并进行 运行 时间调度,这样速度较慢且不太安全且更难使用。
除非与脚本引擎交互,否则我无法想象使用选项 1 的理由。即便如此,也有许多更好的方法来处理它。提出选项 1 作为选项 2 的替代选择的受访者将强烈不聘用,这会让我重新考虑让受访者走到这一步的漏斗。
总之,方案2更好