|
3
|
| Olivier Lalonde Danny · 技术社区 · 16 年前 |
|
1
2
您应该使用一个基类。
你要做的指针运算不是在水上跑动,而是在激流中跑动。 能够与人交往并不那么重要 任何 对象。你打算把你的单身汉和一个端口号联系起来吗?总是从适当的基础派生每个类以获取所需的服务。
如果您关心portpin库占用的内存(最多12或2个字节),可以创建一个
空的
给你一个
|
|
|
2
1
如果您不需要特定的值,您可以简单地将对象的地址转换为(未签名的long)或其他合适的整数类型(ItpTrpTT将是最优的,但它是C99在标准C++中不可用的特性)。 请注意,上面将对象的每个实例与不同的值相关联。如果您需要类型,如您所说,请使用typeid(t),它为每种类型提供一个唯一的对象(这些对象可以与其他此类对象进行比较)。 |
|
|
3
1
好吧,如果您真正的意思是关联“任何对象”而不是“任何对象值”,那么指针听起来就像它们会做您想要的。但是,它们可能不适用于整数常量之类的东西,因为这些常量的值没有保存在分配的对象中。当然,当某个对象被构造成副本(比如你在函数调用中传递它的值)时,它会创建一个新的对象,所以它会在你的映射中得到一个不同的标记。 此外,正如potatoswatter的答案中提到的,地址确实会被重用。显然,当对象仍然存在时,它们不能被重用,但是如果不小心,您可能会遇到一些奇怪的情况;对于尚未添加到地图中的对象,您将有错误的条目。所以,在添加映射值之前,不要尝试查找它们,也不要尝试查找已被破坏的对象!
有了这一点,假设这确实适用于您的用例(并且potatoswatter在对象本身中放置端口和pin值的想法不是更好的想法),那么您不希望将所有指针转换为in t;除了大小问题,这在概念上有点复杂,这就是为什么强制转换是丑陋的。您并不真正关心整数值,只是将指针全部转换为可比较的通用格式——因此,将各种类型的所有T*指针转换为void指针,这是专门为此目的而设计的,并将它们放入
这也会使一个对象及其第一个组件(以及该组件的第一个组件等等)都具有相同的指针,从而与地图中的相同查找值相关联,这是一个困难。如果需要,可以构造一个同时包含指针和类型标识符(a)的结构
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |