【发布时间】:2009-07-26 02:03:45
【问题描述】:
在一些 C++ 代码中,我使用整数来存储大量变化的数据。 为了分析我的程序,我想记录一些变量的某些更改,例如某个值被分配的频率,以及该分配的冗余频率(新值与旧值相同。)
如果类型是 Foo 类,我只需派生一个新的 LoggingFoo 并将我的日志记录数据添加到我感兴趣的成员函数中,然后调用父成员函数。 我必须更新我的代码以使用新类型,但只要我最初与 typedefs 一致,那就是一行更改。
我的问题是我要添加日志记录的变量是一个 int。您不能从 C++ 中的内置类型派生(可以吗?)
我的问题是是否有从基本类型(int、float、double 等)派生的聪明方法。
解决方案可能是定义一个 有效 是 int 的新类。它定义了 每个 int 可以执行的操作,并将该操作应用于私有 int数据成员。 这种策略会奏效,但也许其他人已经制作了这样的类,我可以只使用“fakeint.h”头文件定义。在我自己实现它们之前,是否已经有这样的“代理本机类包装器”类型定义可用?
我当然意识到我的代理 int 不能与 int 互换使用,特别是因为现有的函数定义都需要一个 int.. 但对于我的应用程序来说,这一切都在一个内部循环中,它正在做很多简单的原生+-*^= 操作,不用作函数参数或任何东西。
【问题讨论】:
-
你应该看看 boost 的操作符:boost.org/doc/libs/1_39_0/libs/utility/operators.htm。它可以让你创建一个包含所有典型运算符的类,使其表现得像本机整数类型。
-
@Evan.. 谢谢,总的来说这是一个很好的资源!对我需要的东西过度杀伤,但如果我确实需要自己动手,它会大大减少多余的工作。