如何使用宏根据参数定义不同的数据类型?

时间:2019-12-13 03:23:07

标签: c++ visual-c++

#define MYPTR(n) ((n)==16?(USHORT*):(BYTE*)) 

我想做的是,如果n == 16,则MYPTR(n) pData;应该等于USHORT* pData。否则应为BYTE* pData

但是没有用。我真的不知道该怎么办。

1 个答案:

答案 0 :(得分:1)

您可以使用模板来执行此操作,其方式比宏更安全且强大。

#include <type_traits>
#include <cstdint>

template<int N>
using myptr = std::conditional_t<N == 16, uint16_t*, uint8_t*>;

static_assert( std::is_same<myptr<16>, uint16_t*>::value );
static_assert( std::is_same<myptr<8>, uint8_t*>::value );