Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 有没有办法让这个跨平台?_Linux_Windows_C++11_Time_Cross Platform - Fatal编程技术网

Linux 有没有办法让这个跨平台?

Linux 有没有办法让这个跨平台?,linux,windows,c++11,time,cross-platform,Linux,Windows,C++11,Time,Cross Platform,我试图摆脱依赖于平台的代码 此代码获取由掩码(“%Y-%m-%d%H:%m:%S”)格式化的字符串,并将其转换为std::tm struct和std::time seconds 我想摆脱依赖于预处理器的块的需要,因为(imho)必须有一种标准的方法在两个平台上以相同的方式进行。 windows中不存在strtime,linux(g++c++11)上不存在std::get_time(?) 有没有办法不使用工厂模式或依赖于预处理器的块就跨平台(windows/linux)编写此代码 KDATETIM

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

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

我想摆脱依赖于预处理器的块的需要,因为(imho)必须有一种标准的方法在两个平台上以相同的方式进行。 windows中不存在strtime,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
[...]
}
KDATETIME&KDATETIME::operator=(const char*k)
{
std::字符串smask;
smask=(std::string)此->掩码;
std::字符串sk;
sk=k;
tm.tm_isdst=-1;
#ifdef WINDOWS std::get_time(&tm,smask.c_str());
#否则
strtime(sk.c_str()、smask.c_str()、和tm);

#endif可能重复@Jean BaptisteYunès谢谢,但是不,预处理器指令已经知道(由交叉编译器设置)我想做的是,不需要预处理器指令来完成两个系统都应该能够以标准方式完成的事情(我想)。我会澄清这个问题。也许
strftime()
?@Jean BaptisteYunès谢谢你,但是strftime(将tm结构格式化为字符串)与strptime(用字符串中的数据填充tm结构)相反。由于windows中没有strTime,我不得不使用这种方法。这是windows和linux在此类中的唯一区别,因此我的目的是避免将其拆分为工厂类。哦,对不起,您可以尝试查看