如果我从几个可能中知道确切的类型,我应该使用 C++ 啥类型?

Posted

技术标签:

【中文标题】如果我从几个可能中知道确切的类型,我应该使用 C++ 啥类型?【英文标题】:C++ what type should I use if I know the exact type from a few possible?如果我从几个可能中知道确切的类型,我应该使用 C++ 什么类型? 【发布时间】:2021-02-19 07:42:04 【问题描述】:

希望你能帮助我理解。 我有一个类,它定义了一个缓冲区:

typedef std::variant<signed char, unsigned char, short, unsigned short, int, unsigned int, float> BufferData;

struct BufferAttribute 
  unsigned int index;
  int size = 4;
  char format = ATTRIBUTE_FORMAT::FLOAT;
  bool normalized = false;
  int stride = 0;
  int offset = 0;
  std::vector<BufferData> data;
  std::string name;
;

如你所见,我有一个定义格式的char,所以以后我会知道确切的数据格式。 但就数据而言,我使用的是变体,这让我担心访问者的表现。 我可以使用什么类型使它更快或更好?或者您认为 Variant 是一个不错的选择吗?


附:我担心在我的游戏应用程序中实时处理来自这个缓冲区的数千个数字。

【问题讨论】:

如果您已经附加了格式,为什么不使用联合? 我觉得那个变种有点快,不是吗? @СергейШарпов std::variant 的主要优点是类型安全。我想它甚至比元组还要慢。 @churill 知道了,谢谢。 我假设一个缓冲区中的所有数据都是相同的......所以使用std::variant&lt;std::vector&lt;signed char&gt;, std::vector&lt;unsigned char&gt;, ...&gt; 对我来说更有意义。 【参考方案1】:

如果您关心性能,则必须在您的用例中对其进行衡量。一般陈述性能往往是错误的,或者可能会随着下一个编译器版本和/或硬件一代而过时。

Herestd::variant 的一般性能分析完毕。

如果这适用于您是有问题的。您必须确保BufferAttribute 中的“std::variant”实际上是您的热点。您可以使用perfvTune 等工具查找热点。

【讨论】:

谢谢,我会联系这些工具的。

以上是关于如果我从几个可能中知道确切的类型,我应该使用 C++ 啥类型?的主要内容,如果未能解决你的问题,请参考以下文章

c ++从几个文件中读取几个数组

Sublime PHP 方法签名和自动完成描述

是否有可能知道崩溃的确切时间?

c#检查确切类型[重复]

如果已知 void* 分配大小,如何将确切的内存大小传递给 free()

从几个变量创建字符串