c++ - 在 C++ 中为公共(public)类变量声明两种或多种类型

标签 c++ class types

注:我正在使用 C++11

假设我有一个类(class) foo带有公共(public)变量 bar可以是浮点数或整数。 bar的类型在分配时确定,如下所示:

foo object_name;
object_name.weight() = value

如果 value是一个整数,那么 object_name.weight()是一个整数,如果 value是一个浮点数,那么 object_name.weight()是一个浮点数。

一种可能性是有两个类foo_ifoo_fbar分别输入为 int 和 float;但这很不方便,尤其是当 foo_ifoo_f基本上是彼此的克隆,它们之间只有类型差异。

有没有办法指定 bar 的类型作为intfloat在单个类的范围内?

最佳答案

为了只编写一次类主体,您可以模板类 foo关于 bar 的类型, 然后使用两个 typedef 来简化后续的使用。例子:

template<typename TBar> class foo { 
    public: TBar bar; 
}; 

typedef foo<int> foo_i; 
typedef foo<float> foo_f;

对于 C++ 新手来说,需要注意的是,这种元编程技术实际上会使编译器生成同一类的两个不同版本,即,从生成的二进制文件的角度来看,它相当于用两种不同的类型编写类体两次bar .

关于c++ - 在 C++ 中为公共(public)类变量声明两种或多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60975962/

相关文章:

c++ - 使用指向该结构的指针访问结构变量成员的地址

c++ - LevelDB random read -- 为什么官方的benchmark这么好?

c++ - 防止触摸输入在 Windows 上移动鼠标光标

ruby-on-rails - 在 Rails 控制台中定义一个类(实例)方法

php - 如果 MySQL 函数用于自定义类,则 MySQL 确定是否在字符串周围加上单引号

class - 安卓状态机

c++ - 我如何定义一个模板类来给出类型的指针深度/级别?

C++ - 大量可搜索数据的高效容器?

postgresql - 有没有更简洁的方法将查询结果转换为类型?

function - C++11:为什么 result_of 可以接受仿函数类型作为 lvalue_reference,但不能接受函数类型作为 lvalue_reference?