对于不能使赋值运算符重载的类型有例外吗?
具体来说,我想重载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报告:
错误C2511:'tm&tm :: operator =(sql :: ResultSet&)':在'tm'中找不到重载的成员函数
最佳答案
赋值运算符必须是成员函数(在这种情况下为struct tm
),因此执行此操作的唯一方法是修改标准库本身,而您绝对不应该这样做。当然,您可以编写一个名为free的函数来执行所需的任何操作。