gpt4 book ai didi

c++ - 根据签名区分专用结构

转载 作者:行者123 更新时间:2023-11-28 05:17:21 25 4
gpt4 key购买 nike

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

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

关于c++ - 根据签名区分专用结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42333058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com