我在使用C ++重载方法时遇到了一些麻烦。
typedef char int8_t;
class SomeClass{
public:
…
void Method(int8_t paramater);
void Method(char paramater);
};
由于int8_t
的typedef为char
,因此它们只是别名,它们可能引用相同的类型,在这种情况下,重载将不起作用。
我想让它们同时工作?你能建议解决方案吗? 注意:我不想添加模板化方法。
以下是错误:
错误:SomeClass :: Method(char)的多个声明
答案 0 :(得分:5)
使用仿制品。在结构中包装char
或int8_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的三个变体定义重载,那么你就没有问题了。