【问题标题】:overloading for typedef parameters [duplicate]typedef参数的重载[重复]
【发布时间】:2012-05-15 14:42:18
【问题描述】:

可能重复:
Overloading member methods with typedef aliases as parameters

我有以下方法 void setField(char x); 和另一个重载方法void setField(int8_t x); 这将在除solaris 之外的所有平台上编译,在solaris int8_t 上是typedef as char

有什么办法可以解决这个问题,因为我不想更改method 的名称 我得到编译器错误说method already exists

【问题讨论】:

  • 我知道有一个像这样的问题有一个答案。
  • @chris : 哪个问题,请告诉我
  • 我不确定。我只记得今天看到了惊人的相似。我正在寻找它。
  • @chris 可能是this one
  • 能否在预处理器 #ifdef 中定义有问题的函数,如果平台是 Solaris,则进行不同的定义?

标签: c++ typedef overloading


【解决方案1】:

没有办法解决这个问题。 typedef 只是同一类型的另一个名称。但是你只能重载不同的类型。所以在你的情况下 - 编译器会看到 setField(char x)。

为什么需要这两种方法?由于 sizeof(char) 根据标准为 1,因此这些名称之间实际上没有区别。

【讨论】:

  • 因为在其他平台上它被定义为无符号字符并被编译。
  • int8_t 已签名。那你在做什么?
  • @Avinash 这种问题正是引入stdint.h 的原因。如果您的代码依赖于整数类型的符号和大小的严格且一致的定义,则应使用此文件。除此之外,您不能在 C 中取消类型定义。
  • 又是我的问题 - 你为什么需要这个?
  • @TobiasLangner 可能是一个非常本地化但非常相关的例子:你有没有尝试过std::coutint8_t?它不起作用,因为它与 char 相同,但含义却截然不同。拥有强大的 typedef 肯定会很好。
【解决方案2】:

我不认识 int_8。 stdint.h 有 int8_t。你试过吗?否则,在 Solaris 上找到定义 int_8 的头文件,并使用适当的预处理器定义在 Solaris 构建中有条件地排除它。

【讨论】:

  • 它怎么可能不是typedef char? (好吧,也许是 typedef 有符号字符)。任何其他平台对其的定义有所不同?
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 2015-08-22
  • 2012-07-22
  • 1970-01-01
  • 2015-08-10
  • 2019-05-23
  • 2021-09-22
  • 2012-08-21
相关资源
最近更新 更多