对于不能重载赋值运算符的类型是否有异常(exception)?
具体来说,我想重载 struct tm 的赋值运算符(来自 time.h)所以我可以为它分配一个 sql::ResultSet。
我已经有了转换逻辑:
sscanf(sqlresult->getString("StoredAt").c_str(), "%d-%d-%d %d:%d:%d",
&TempTimeStruct->tm_year, &TempTimeStruct->tm_mon, &TempTimeStruct->tm_mday,
&TempTimeStruct->tm_hour, &TempTimeStruct->tm_min, &TempTimeStruct->tm_sec);
我尝试过重载:
tm& tm::operator=(sql::ResultSet & results)
{
/*CODE*/
return *this;
}
但是 VS08 报告:
error C2511: 'tm &tm::operator =(sql::ResultSet &)' : overloaded member function not found in 'tm'
最佳答案
struct mytm : public tm {
mytm& operator =(tm const& input) {
/* whatever you want it to do. */
return *this;
};
有些人对此不以为然。我将附上以下警告:
如果你有大量的 tm
项目(或任何其他经典的 c-lib 结构)在你的代码中 float ,并且你想控制它们,用这种方式围绕它们包装一个类允许你这样做。只是为了 3 行仿冒品而这样做可能不是一个好主意。批评者可能更喜欢:
struct mytm {
tm the_tm;
/* etc */
};
相反。
关于c++ - 重载赋值运算符,用于将 sql::ResultSet 赋值给 struct tm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2575973/