Int64 和 time_t 之间的 C++ 重载歧义
c++ overload ambiguity between int64 and time_t
>我有一个类格式,需要为 32 位和 64 位 Linux 平台进行编译。
该类具有用于添加基元值的方法,然后根据格式字符串设置值的格式。或多或少是printf(...)
的封装
我的类看起来像这样:
class Format
{
public:
Format(string fmt);
add(int16_t x);
add(int32_t x);
add(int64_t x);
add(time_t x);
}
当我编译为 32 位时,代码会编译,因为int64_t和time_t转换为不同的类型。 如果我编译为 64 位,我会得到:
错误:"格式::添加(time_t("无法重载
如果我删除add(time_t x)
我会从 32 位编译器收到编译错误:
错误:重载的"add(time_t&("调用不明确
我理解编译失败的原因。
但是我没有看到这个问题的最佳解决方案?
我不想从time_t投向呼叫者int64_t。
那么,如何实现多平台支持的最佳方式呢?
在添加 add(... ( 的"long"和"int"重载版本时,我遇到了类似的问题。
问候 克劳斯
time_t
通常是有符号的32位或有符号的64位整数类型。(其实际类型不受C++标准保证(。
如果你在一个平台上,它是与固定宽度积分类型之一相同的基本类型的typedef
,那么编译器将无法区分你的函数。
最好的解决方法是从 C 程序员的书中取出一片叶子并使用
someMethod_time_t(time_t x)
等等。
相关文章:
- 继承函数的重载解析
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 重载操作程序时出错>>用于类中的字符串 memebr
- 一个关于在C++中重载布尔运算符的问题
- 不同翻译单元中不可重载的非内联函数定义
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 将重载的成员函数传递给函数模板
- c++:可变模板和函数重载
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 重载==不适用于二进制树
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符new[]的行为取决于析构函数
- 正在尝试重载二进制搜索树分配运算符
- 重载Singly Linked List中的赋值运算符
- 取消引用运算符不能重载