在Typedef中转换模板参数

时间:2016-10-13 13:32:18

标签: c++ templates type-conversion typedef

我正在编写一个类,它要求实例化的模板类型在bitshift操作下表现得像无符号类型。这是如此,因为位移下的负数与位移操作下的正数表现不同。因此,我的想法是简单地将我获得的任何类型作为模板参数转换为typedef中的未签名版本,并在内部仅使用typedefed版本。如果模板参数类型不支持这个,那么......它根本就没有,并且会出现编译时错误。我试过的看起来像这样:

template <class X>
class C
{
    using Y = unsigned X;
};

不正确:error: type-id cannot have a name

这一切都可能吗?如果是这样的话?

1 个答案:

答案 0 :(得分:2)

您正在寻找std::make_unsigned

template <class X>
class C
{
    using Y = std::make_unsigned_t<X>;
};