4

我在 C++ 中重载方法时遇到了一些问题。

typedef char int8_t;
class SomeClass{
public:
…
void Method(int8_t paramater);
void Method(char paramater);
};

由于int8_t是 typedef,因为char它们只是别名,因此它们可能引用相同的类型,在这种情况下重载将不起作用。

我想让它们同时工作吗?你能提出相同的解决方案吗?注意:我不想添加模板化方法。

以下是错误:

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

4

3 回答 3

5

使用人造类型。char将其中一个或包装int8_t在一个结构中并将该结构用作参数。

于 2012-05-14T11:39:40.773 回答
2

...它们可能引用相同的类型,在这种情况下重载将不起作用。我想让它们同时工作吗?

幸运的是,这是不可能的(即使使用templates)。因为它扼杀了 a 的目的typedef
如果您打算在代码中执行此操作,那么这是代码异味;你可能不得不改变你的设计。

于 2012-05-14T11:39:03.227 回答
1

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

void Method(char paramater);
void Method(signed char paramater);
void Method(unsigned char paramater);

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

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

typedef __special_secret_sauce int8_t;

然后你需要为int8_t. 你很难定义另一个重载int8_t来应对这些实现,同时又不为 typedef int8_tas的实现定义它signed char。也有人说这根本不可能。

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

于 2012-05-15T07:34:58.923 回答