Int64 和 time_t 之间的 C++ 重载歧义

c++ overload ambiguity between int64 and time_t

本文关键字:C++ 重载 歧义 之间 time Int64      更新时间:2023-10-16

>我有一个类格式,需要为 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)

等等。