有没有办法使这个跨平台?

时间:2019-10-01 14:19:19

标签: linux windows c++11 time cross-platform

我正试图摆脱依赖于平台的代码。

此代码获取由掩码格式化的字符串(“%Y-%m-%d%H:%M:%S”),并将其转换为std :: tm结构和std :: time秒。

我想摆脱依赖预处理器的块的需要,因为(imho)必须在这两个平台上以相同的方式来进行标准化处理。 在Windows中不存在strptime,在Linux(g ++ c ++ 11)上std :: get_time不存在(?)。

是否有任何方法可以使此代码跨平台(windows / linux),而无需使用工厂模式或依赖预处理器的块?

KDATETIME& KDATETIME::operator= (const char* k)
{
std::string smask;
smask = (std::string)this->mask;
std::string sk;
sk=k;
tm.tm_isdst=-1;

#ifdef WINDOWS    <<---- THIS BLOCK 

std::istringstream ss(sk);
ss >> std::get_time(&tm, smask.c_str());

#else

strptime(sk.c_str(), smask.c_str(), &tm);

#endif          <<------

this->time = mktime(&tm);  // t is now your desired time_t
[...]
}

0 个答案:

没有答案