繁体   English   中英

基于符号性区分专用结构

[英]Differentiating Specialized Structs based on signed-ness

我需要能够区分大小相同但符号属性不同的数据类型。 下面是一个例子

template <size_t N>
struct alias;

template<>
struct alias<sizeof(unsigned char)>{
    using Type = unsigned char;
};

template<>
struct alias<sizeof(signed char)>{
    using Type = signed char;
};

using uint8 = alias<1>::Type;
using int8 = alias<1>::Type;  //This is supposed to be signed type

由于第一个专业化使用无符号字符,并且有符号和无符号字符都使用相同的大小,所以alias<1>::Type结果返回无符号字符。 但是我希望能够返回与有符号和无符号相同的数据类型。

我也知道在type_traits头文件下有std :: is_signed或std :: is_unsigned。 我不知道如何在这种情况下使用它们。

编辑

部分完整代码

#define BYTE 1

template <size_t N>
struct alias;

#define REGISTER_ALIAS(X)           \
template <>                         \
struct alias <sizeof(X)> {          \
           using Type = X;          \
};

REGISTER_ALIAS(unsigned char)
REGISTER_ALIAS(signed char)

using int8 = alias<BYTE>::Type;
using uint8 = alias<BYTE>::Type;

这就是我所做的。

enum Sign {
  SIGNED,
  UNSIGNED
};

template <size_t SIZE, Sign SIGN>
struct Alias;

template <>
struct Alias<1, SIGNED> {
  using type = int8_t;
};
//etc

我不明白你想要什么

但是我想您必须以某种方式明确表示要带符号的类型还是无符号的类型。

我基于几种不同的类型和显式选择,提出了以下方法

template <size_t N>
struct alias;

template<>
struct alias<sizeof(char)>{
    using sType = signed char;
    using uType = unsigned char;
};

using uint8 = alias<1>::uType;
using int8 = alias<1>::sType;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM