首页 > 解决方案 > 为函数定义符号模糊指针参数

问题描述

是否可以为 C 和/或 C++ 中的函数定义符号模糊指针参数?

例如,假设我有一个适用于 8 位变量的无符号和有符号类型的函数,并且该函数需要一个指向要处理/操作的变量的指针。

我知道我可以使用 (unsigned char*) 或 (signed char*) 进行类型转换,但我正在寻找更清洁的东西。

unsigned char Var1;
signed char Var2;

void MyFunction(unsigned char* Var);

MyFunction(&Var2); // This creates an error

话虽如此,我想提出一个想法,即我认为高于汇编语言的语言不应该使用诸如 BYTE / WORD / DWORD 或 QWORD 之类的名称来定义具有显式符号类型的变量。我这样说是因为这些是装配的大小运算符,实际上并没有定义符号。登录程序集由所选指令选择。然而,我看到这些名称在 C/C++ 中随处使用,并被定义为 unsinged,至少在 Windows 上是这样。这对我来说似乎是一个利益冲突......

标签: c++cvisual-studiovisual-studio-2012programming-languages

解决方案


如果这两种对象的逻辑相同,则最好的选择是使用函数模板。

template <typename T>
void MyFunction(T* Var);

如果您想将该函数的使用限制为仅用于 8 位类型,您可以static_assert在实现中使用 a。

template <typename T>
void MyFunction(T* Var)
{
   static_assert(sizeof(T) == 1, "Wrong type. Can only deal with 8-bit types.");
   ...
}

推荐阅读