gpt4 book ai didi

c++ - 宏的重写以遵循 C++ 约定

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:41 25 4
gpt4 key购买 nike

如何重写下面的宏,使它们真正遵循 C++ 约定? (在 C++ 中,我们更喜欢使用 typedefconstinline 函数)。
这是宏。

#define UBYTE unsigned char
#define ULONG unsigned long
#define FALSE 0
#define COMPRESS_MAX_COM 0x70000000
#define COMPRESS_MAX_ORG (1024-COMPRESS_OVERRUN)
#define MAX_RAW_GROUP (16*MAX_RAW_ITEM)
#define U(X) ((ULONG) X)

如何将上述宏更改为c++约定?

最佳答案

对类型使用typedefusing (C++11) 而不是#define,然后使用const 常量。这些函数可以定义为 C++11 中的 constexpr

typedef unsigned char UBYTE;  // using UBYTE = unsigned char; // C++11
typedef unsigned long ULONG;
const unsigned int FALSE=0; // constexpr usigned int FALSE = 0; // C++11
const ULONG COMPRESS_MAX_COM=0x70000000;
const ULONG COMPRESS_MAX_ORG=(1024-COMPRESS_OVERRUN); // if COMPRESS_OVERRUN is const
const ULONG MAX_RAW_GROUP=(16*MAX_RAW_ITEM); // again if MAX_RAW_ITEM is a previously defined const
#define U(X) ((ULONG) X) // this can stay as it is

template <typename T>
ULONG U(const T& x)
{
return static_cast<ULONG>(x);
}

因此 U(some type T) 将返回其类型为 T 的参数的转换为 ULONG。

关于c++ - 宏的重写以遵循 C++ 约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23304606/

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