【发布时间】:2020-07-13 12:03:34
【问题描述】:
注意:我使用的是 C++11
假设我有一个类 foo 和公共变量 bar,它可以是浮点数或整数。 bar 的类型在分配时确定,如下所示:
foo object_name;
object_name.weight() = value
如果value 是一个整数,那么object_name.weight() 是一个整数,如果value 是一个浮点数,那么object_name.weight() 是一个浮点数。
一种可能性是有两个类foo_i 和foo_f,bar 的类型分别为 int 和 float;但这很不方便,尤其是foo_i 和foo_f 基本上是彼此的克隆,只有它们之间的类型不同。
有没有办法在单个类的范围内将bar 的类型指定为int 或float?
【问题讨论】:
-
如果你会使用 C++17 或更高版本,你可以使用
std::variant。 -
@RSahu 我只有 C++14 及更早版本。到目前为止,我一直在使用 C++11。
-
我想到的最简单的方法是在 bar 类型上模板类 foo,即
template<typename TBar> class foo { public: TBar bar; };。这样,您只需编写一次类主体,然后可以使用typedef foo<int> foo_i;和typedef foo<float> foo_f;来获取您的两个类。 -
您可能想要滚动您的
std::variant版本。这是一个有意义的抽象,您可以将其用于您的用例。 -
(我会将我的评论扩展为答案。)