在MFC应用程序中,我喜欢将SQL值(CDBVariant)映射到MFC CTime。因为数据库条目可以是NULL (值不存在),所以我想知道CTime是否为空。MFC文档中的备注 to CTime::Format让我思考,这应该是可能的:
如果此CTime对象的状态为空,则返回值为空字符串。
boost::optional<CTime>将是一个很好的选择?发布于 2013-03-06 21:10:23
CTime只是__time64_t的包装器。当您调用格式时,它会这样做:
inline CString CTime::Format(_In_z_ LPCTSTR pFormat) const
{
if(pFormat == NULL)
{
return pFormat;
}
TCHAR szBuffer[maxTimeBufferSize];
struct tm ptmTemp;
if (_localtime64_s(&ptmTemp, &m_time) != 0)
{
AtlThrow(E_INVALIDARG);
}
if (!_tcsftime(szBuffer, maxTimeBufferSize, pFormat, &ptmTemp))
{
szBuffer[0] = '\0';
}
return szBuffer;
}因此,您想要查看的系统函数是_tcsftime。这就是我认为文档不太准确的地方。如果_localtime64_s失败,您将得到一个异常,因此“null”时间不能真正传递给_tcsftime。只有当_tcsftime失败时才会获得NULL,但这并不是因为“null”时间。
因此,简而言之,使用类似于您建议的boost::optional来表示null。
https://stackoverflow.com/questions/15250291
复制相似问题