使用typedef别名作为参数重载成员方法

use*_*608 4 c++ overloading compiler-errors

我在使用C++重载方法时遇到了一些麻烦.

typedef char int8_t;
class SomeClass{
public:
…
void Method(int8_t paramater);
void Method(char paramater);
};
Run Code Online (Sandbox Code Playgroud)

因为int8_ttypedef char只是别名,所以它们可能引用相同的类型,在这种情况下,重载将不起作用.

我想让它们同时工作?你能建议解决方案吗?注意:我不想添加模板化方法.

以下是错误:

错误:SomeClass :: Method(char)的多个声明

dir*_*tly 5

使用仿制品.包裹其中一个charint8_t在结构中并使用该结构作为参数.


Win*_*mer 1

通过尝试以下方法,您可能会获得一定程度的改进:

void Method(char paramater);
void Method(signed char paramater);
void Method(unsigned char paramater);
Run Code Online (Sandbox Code Playgroud)

如果实现定义了int8_t,并且定义与这三个之一匹配,则将调用正确的函数。

然而,一个狡猾的实现可能会做这样的事情:

typedef __special_secret_sauce int8_t;
Run Code Online (Sandbox Code Playgroud)

然后您需要为 定义另一个重载int8_t。对于您来说,定义另一个重载来int8_t应对这些实现,同时不为 typedef 为 的实现定义它是相当int8_t困难的signed char。还有人说这根本不可能。

可能存在int8_t根本不存在的实现。如果您只是为 char 的三种变体定义重载,那么您就不会有问题。