C++中的typesafe typedef

Pau*_*aul 14 c++ types type-safety

我想在我的C++程序中使用类似typedef的东西来增强类型安全性.

举个例子,假设我有两个功能

void function1(unsigned idOfType1);
void function2(unsigned idOfType2);
Run Code Online (Sandbox Code Playgroud)

那么我可以错误地将idOfType2传递给function1,反之亦然.我希望编译器在这种情况下给我一个错误.我知道我可以将这些unsigned包装在一个结构中,但是我必须提供一个字段名称并使用它.来访问它们,这有点不方便.这有什么好办法吗?

编辑:据我所知typedef,这不会用于此目的,因为它只是一种类型的简写,不会用于类型检查.

Ste*_*sop 16

使用Boost强类型定义:

typedef为现有类型创建别名.它不会创建可用于匹配函数或模板参数的新类型...

使用BOOST_STRONG_TYPEDEF解决了这个问题......

BOOST_STRONG_TYPEDEF 是一个宏,它生成一个名为"name"的类包装和它的基本类型的实例,并提供适当的转换运算符,以使新类型可以替换它所包含的类型.


Kon*_*rad 7

如你所说,typedef在这里不会帮助你.我不能立即想出一个更好的方法,但是如果你在struct/class选项中使用你的包装,你可以使用转换运算符来消除成员方法或函数调用.

例如:

struct WrappedType
{
    operator type()
    {
         return _value;
    }

    type _value;  
}
Run Code Online (Sandbox Code Playgroud)

我并不是说这是做提个醒方式;-)