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

时间:2012-05-14 11:33:46

标签: c++ compiler-errors overloading

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

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

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

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

以下是错误:

  

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

3 个答案:

答案 0 :(得分:5)

使用仿制品。在结构中包装charint8_t之一并将结构用作参数。

答案 1 :(得分:2)

  

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

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

答案 2 :(得分: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定义另一个重载来与这些实现竞争,同时不为那些将int8_t定义为signed char的实现定义它。其他人说这甚至都不可能。

可能存在根本不存在int8_t的实现。如果你只为char的三个变体定义重载,那么你就没有问题了。