Есть ли способ сделать эту кроссплатформенную? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь избавиться от зависимого от платформы кода.

Этот код получает строку, сформированную маской ("% Y-% m-% d% H:% M:% S") ипреобразовать его в структуру std :: tm и секунды std :: time.

Я хочу избавиться от необходимости зависимых от препроцессора блоков, поскольку (imho) должен быть стандартный способ сделать это на обеих платформах одинаково. strptime не существует в windows, std :: get_time не существует (?) в linux (g ++ c ++ 11).

Есть ли способ сделать этот код кроссплатформенным (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
[...]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...