透明C ++编号/ Int包装器

时间:2011-07-10 21:39:27

标签: c++ c++11 operators inline wrapper

我已经创建了一个用于处理unsigned int(8,16,32 ...)的位的类,并且我一直在尝试对它进行基准测试,而不是简单的按位操作,但是要对速度进行准确的测试至少可以说,按位运算很复杂。包装器的原因是使用起来要复杂得多。

现在,虽然这在实际上可能比学术上更有用,但我想知道是否有可能使一个类包裹在一个透明的int中,就像直接使用int一样(使用所有可能的运算符) )除了允许我以某种方式操纵它的函数,以及它是否可以快速(具有大量内联)。

我可以使用任何和所有C ++ 0x功能来实现这一目标。

3 个答案:

答案 0 :(得分:2)

您可以设置自定义类并重载所有相关运算符(算术运算符,比较运算符,按位运算符,转换运算符),并根据需要提供自己的行为。

据我所知,确实可以在几乎所有方面使其表现得像int

内联编译器可能会在消除大部分开销方面做得非常出色,但要了解结果有多好,您需要尝试一下。

这种类型几乎没有用于基准测试 - 我宁愿重复相同的操作,直到测量中的相对误差变小。或多或少不可能按照单个按位操作的速度计时,因为它实际上归结为一两个机器指令。

答案 1 :(得分:1)

模板?

此外,分析您的运营有什么困难?通常的方法是进行相同的操作X次,然后得到平均值。如果您使用的是英特尔CPU,您可以在每次操作之前和之后读取CPU的计时器,然后获得平均值,它有一些缺陷但是对于您的目的应该相对正常

http://en.wikipedia.org/wiki/Time_Stamp_Counter

此外,您可以查看编译器在使用类时生成的asm,并查看是否有任何可以重构代码的区域,以便它可以在优化时做得更好。

答案 2 :(得分:0)

是的,这是可能的;但我认为从长远来看,你可能会发现更容易编写一些模板化的内联函数,你可以用各种int8 / int16 / etc参数调用它们。这样您就不必担心如何处理类的传递对象到期望常规整数的函数,反之亦然。 (并不是说那也不可行,但它可以让事情变得更简单,完全避免这个问题)