C++ c++;int64和time\t之间的重载模糊性

C++ c++;int64和time\t之间的重载模糊性,c++,public,C++,Public,我有一个需要为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和time会转换为不同的类型。

我有一个需要为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和time会转换为不同的类型。 如果我编译为64位,我会得到:

错误:“格式::添加(时间)”不能重载

如果删除
add(time\t x)
32位编译器会出现编译错误:

错误:重载“add(time&)”的调用不明确

我理解汇编失败的原因

但我看不到解决这个问题的最佳方案

我希望不必时不时地对来电者施压

那么,我如何实现这一点,才能成为多平台支持的最佳方式呢

在添加add(…)的“long”和“int”重载版本时,我遇到了类似的问题

问候
Klaus通常是有符号32位或有符号64位整数类型。(其实际类型不受C++标准的保证)。 如果您在一个平台上,它的
typedef
基本类型与一个固定宽度整数类型相同,那么编译器将无法区分您的函数

最好的解决方法是学习C程序员的书并使用它

someMethod_time_t(time_t x)

等等。

为什么相同的函数具有相同的名称,但使用的参数在概念上非常不同?换句话说,你可以用不同的名字来命名函数。你的函数是做什么的?也许把处理时间的函数命名为其他函数?对我来说,很难想象我会用同一个名字来表示与时间有关的事情和其他任何事情。@Yksisarvinen:这没什么帮助。如果
time\u t
与其他三种类型中的一种类型相同,编译器仍将无法区分模板。取而代之的是
std::chrono::time\u point
?再次重申,您能解释一下您的用例吗?很难想象你为什么要这样做。恕我直言,神圣的烟真难看。@过路人:太糟糕了。因为
time\u t
的类型可以是任何类型,所以不能将其与一组重载函数一起使用。在这方面,你又回到了过去的好日子。