【问题标题】:C++ typed variables using struct使用结构的 C++ 类型变量
【发布时间】:2022-01-06 21:19:20
【问题描述】:

在 C++ 中,我想创建一个不会被意外使用或转换为其他类型的类型化变量。我想出的是:

struct  DId {
    uint32_t    v;  
    DId (uint32_t i = 0)    
    {   
        v   =   i;  
    }
};

struct  TId {   
    uint32_t    v;  
    TId (uint32_t i = 0)    
    {   
        v   =   i;  
    }
};

这似乎可行,虽然有时我需要直接访问该值,但我真的应该定义其他方法吗?它在运行时是否使用任何额外的资源? (如果不在调试模式下,我可以使用预处理器命令将其切换为“使用 TId = uint32_t”,但这意味着每当我需要直接访问该值时需要额外的工作。)

还是有一些我没有注意到的更好的方法?

【问题讨论】:

  • 请更好地解释您想要实现的目标
  • 听起来你想要一个scoped enumeration,虽然这些对于任意值都不是很好,只是为了避免隐式转换为其他类型。
  • 谷歌“强类型 c++”
  • 您正在寻找“强类型定义”。 Boost有它,你的解决方案也很好。不要在发布模式下做其他事情,没有开销。
  • 可能是重复的:stackoverflow.com/questions/34287842/… 有人可以看看吗?

标签: c++ types


【解决方案1】:

您可以将结构模板化,以便它可以在多个地方使用并定义类型转换运算符。

template<typename T>
struct Id {
  T v;  
  Id (T i = T{}) { v = i; }. // Ideally not required
  operator T () { return v; } // optional to allow conversion to T
};

using DId = Id<uint32_t>;

您的代码也很好。以上方式是为了更好的利用,避免重复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多