Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正确的C++;存储多类型数据的方法 让我考虑一下,我有4个字节来描述一些实际的系统参数。假设这可以解释为float、uint32_t和boolean。将这些变量一起存储和处理的主要思想。现在我使用了一个(非常简化)具有4字节数组的类,函数float-toFloat(),uint32\t-toInt(),bool-toBool()和参数ID(指定存储值类型)。因此,我需要一个函数T getValue(),它将返回正确类型的值T。所以我的问题是:最正确的方法是什么?我应该使用模板、继承、其组合还是其他什么?_C++_Templates_Inheritance_Data Storage - Fatal编程技术网

C++ 正确的C++;存储多类型数据的方法 让我考虑一下,我有4个字节来描述一些实际的系统参数。假设这可以解释为float、uint32_t和boolean。将这些变量一起存储和处理的主要思想。现在我使用了一个(非常简化)具有4字节数组的类,函数float-toFloat(),uint32\t-toInt(),bool-toBool()和参数ID(指定存储值类型)。因此,我需要一个函数T getValue(),它将返回正确类型的值T。所以我的问题是:最正确的方法是什么?我应该使用模板、继承、其组合还是其他什么?

C++ 正确的C++;存储多类型数据的方法 让我考虑一下,我有4个字节来描述一些实际的系统参数。假设这可以解释为float、uint32_t和boolean。将这些变量一起存储和处理的主要思想。现在我使用了一个(非常简化)具有4字节数组的类,函数float-toFloat(),uint32\t-toInt(),bool-toBool()和参数ID(指定存储值类型)。因此,我需要一个函数T getValue(),它将返回正确类型的值T。所以我的问题是:最正确的方法是什么?我应该使用模板、继承、其组合还是其他什么?,c++,templates,inheritance,data-storage,C++,Templates,Inheritance,Data Storage,您可以使用: std::变量字节(3.1415); 这似乎是工会的完美用例。唯一的问题是,在联合中,您不知道存储了哪种值类型。您可以附加类型信息,例如,允许使用设置类型的访问者访问联合成员,或者如果您有任何其他方法知道可以使用的类型。阵列必须具有唯一的数据类型,否则必须结合使用多个阵列构建并行阵列结构 std::variant可能有帮助。不能从同一函数返回不同的类型。如果您在编译时知道所需的类型,那么模板可能会有所帮助,但除此之外,无法让“一个函数T getvalue()返回正确类型的值T”。存

您可以使用:

std::变量字节(3.1415);

这似乎是工会的完美用例。唯一的问题是,在联合中,您不知道存储了哪种值类型。您可以附加类型信息,例如,允许使用设置类型的访问者访问联合成员,或者如果您有任何其他方法知道可以使用的类型。

阵列必须具有唯一的数据类型,否则必须结合使用多个阵列构建并行阵列结构

std::variant
可能有帮助。不能从同一函数返回不同的类型。如果您在编译时知道所需的类型,那么模板可能会有所帮助,但除此之外,无法让“一个函数
T getvalue()
返回正确类型的值
T
”。存储该值的变量类型是什么?必须在编译时知道它
std::variant
提供了一种解决方法,但它非常冗长。@MaxLanghof是的,我理解它,所以我尝试使用模板。即使我创建了像a=common(2)、b=common(3.14)这样的对象,我是否可以使用某种机制来获取值而不需要类型指向?像a.getValue()而不是b.getValue()。@Stanislav
x=a.getValue()
会有什么类型?编译器必须在编译时决定一种类型。如果在编译时不能告诉编译器类型,则无法编译程序。如果您在编译时确实知道类型,并且只是想避免键入,那么隐式转换可能会有所帮助(但您通常应该远离它们)。@Stanislav直接在不同类型的变量上循环是不可能的(我假设您的意思是
getValue
将在不同的循环迭代中返回不同的类型)
std::variant
+
std::Visite
可以让您到达目的地。在任何情况下,请添加代码演示如何使用这个。P·伊云斯的答案更好。@遗忘2019,你不想在C++中使用<代码>联合< /COD>。@湮没,作为一个坏例子?也许最好教新手正确的开始方式。@PaulEvans正是这样,对于我们这些不得不维护旧代码的人来说也是如此。事实是,工会将存在一段时间。对于一个新的代码联盟来说,IMO是一个错误,这个用例与类型双关无关。
variant
可能是OP应该使用的,但我不确定这是否是他们真正的意思。它说“我有4个字节(…),可以解释为float、uint32_t和boolean”——所以同样的4个字节可以解释为不同的东西?(这可能只是一个类中的模板方法)。谢谢你的回答,这是一个将字节转换为变量的好方法,但我的问题不仅仅是转换。我希望仅根据使用此值存储的值类型获取存储值。例如,我有温度(浮动)、测量次数(uin32_t)和传感器状态(bool)。然后,我想为每种情况获取三个变量,并在不直接指向这种类型的情况下获取这些值,就像在'std::variant'@Stanislav中所假设的那样。那么,你应该作为一个新问题来问这个问题。
std::variant<float, uint32_t, bool> bytes(3.1415);