基于签名性区分专业结构
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
结果返回无符号char。但是我希望能够返回与签名和未签名的相同数据类型。
我也知道有std :: is_signed或std :: is_unsign在type_traits header文件下。在这种情况下,我无法弄清楚如何使用它们。
编辑
部分完整代码
#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;
相关文章:
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 特定于目录结构的生成文件
- 相当于 Java 中的C++结构
- C++中用于结构的纯数组的类似于TableView/DataFrame的通用功能
- 适用于频繁更改的大型数据集的最佳数据结构
- C++类似于 std::map 的数据结构,具有多个键级别
- 别名漏洞是否适用于签名字符?
- 结构化绑定:当某些内容看起来像引用并且行为类似于引用,但它不是引用时
- 类相对于数据结构的重要性
- 使结构的行为类似于 std::tuple
- 如何将比较运算符应用于两个匿名结构中的每个变量
- 基于签名性区分专业结构
- 在向量中查找值,而向量又存在于结构中
- C++ - 泛型结构的成员在分配双精度时给出错误的值(但适用于整数)
- 在老板层次结构中查找"top"老板仅适用于某些测试用例
- 使用依赖于 "this" C++ 的比较结构初始化集合
- 是否更正PInvoke签名以使用带有C#保留内存的嵌套结构
- 在C#中等效于未签名的长Int是什么
- 我是否可以在类似于 C# 的 C++ 中创建全局命名空间层次结构,以帮助开发人员使用我们的代码?
- 在 Windows 中对结构进行签名并在 Linux 中读取它