我有一个需要在32位和64位linux平台上编译的类Format。
该类具有添加原始值,然后根据格式字符串格式化值的方法。 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位,则会得到:
错误:‘Format :: add(time_t)’不能重载
如果删除add(time_t x)
,则会从32位编译器中收到编译错误:
错误:重载的“ add(time_t&)”的调用不明确
我了解编译失败的原因。
但是我看不到针对此问题的最佳解决方案吗?
我不想在调用方将time_t强制转换为int64_t。
那么我该如何实现多平台支持的最佳方法呢?
添加add(...)的“ long”和“ int”重载版本时,我也遇到类似的问题。
问候 克劳斯
答案 0 :(得分:0)
time_t
通常是带符号的32位或带符号的64位整数类型。 (它的实际类型不受C ++标准的保证。)
如果您所使用的平台与固定宽度整数类型之一是typedef
基本类型相同,那么编译器将无法区分您的功能。
最好的解决方法是从C程序员的书中摘下来并使用
someMethod_time_t(time_t x)
以此类推。