【发布时间】:2019-08-23 13:41:33
【问题描述】:
假设我有 4 个字节来描述一些真实的系统参数。假设可以解释为浮点数、uint32_t 和布尔值。将这些变量存储和处理在一起的主要思想。现在我使用一个类(非常简化)有 4 个字节的数组,函数float toFloat()、uint32_t toInt()、bool toBool() 和参数 ID(它指定存储值类型)。所以我需要一个函数T getValue(),它将返回正确类型T 的值。所以我的问题是:最正确的方法是什么?我应该使用模板、继承、它的组合还是其他方式?
【问题讨论】:
-
std::variant<float, uint32_t, bool>可能会有所帮助。 -
你不能从同一个函数返回不同的类型。如果您在编译时知道您期望什么类型,那么模板可以提供帮助,但否则无法拥有“一个函数
T getvalue(),它将返回正确类型的值T”。您存储该值的变量的类型是什么?它必须在编译时知道。std::variant提供了一种解决方法,但它非常冗长。 -
@MaxLanghof 是的,我明白了,所以我尝试使用模板。即使我创建了像 a = common
(2), b = common (3.14) 这样的对象,我是否可以使用某种机制在没有类型指向的情况下获取值?像 a.getValue() 而不是 b .getValue(). -
@Stanislav
x = a.getValue()有什么类型?编译器必须在编译时决定 one 类型。如果你不能在编译时告诉编译器类型,你将无法编译你的程序。如果您确实在编译时知道类型并且只是想避免键入,则隐式转换可能会有所帮助(但您通常应该远离它们)。 -
@Stanislav 直接循环不同类型的变量是不可能的(我假设你的意思是
getValue会在不同的循环迭代中返回不同的类型)。std::variant+std::visit可以带你到那里。无论如何,请添加代码来演示您打算如何使用它。
标签: c++ templates inheritance data-storage