对于不能使赋值运算符重载的类型有例外吗?

具体来说,我想重载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的函数来执行所需的任何操作。

10-02 03:04