【问题标题】:Template specialization of a member function成员函数的模板特化
【发布时间】:2012-04-23 13:57:02
【问题描述】:

我必须在(C++,我使用 MS Visual Studio 2008 SP1)中对类成员函数使用显式特化,但我无法成功编译它。得到

错误 C2910: 'File::operator

class File
{
   std::ofstream mOutPutFile;
public:
   template<typename T>
   File& operator<<(T const& data);
};


template<typename T>
File& File::operator<< (T const& data)
{
    mOutPutFile << preprosesor(data);
    return *this;
}

template< >
File& File::operator<< <> (std::ofstream& out)
{
   mOutPutFile << out;
   return *this;
}

【问题讨论】:

  • 您在 Windows 上工作; MSVC 的版本可能是相关的。如果您提供此类信息,通常可以帮助人们提供更好的答案。
  • Andrey 已经回答了您的问题。最重要的是,您可以考虑使用函数重载而不是函数特化。这样会更简单。

标签: c++ templates compiler-errors template-specialization ofstream


【解决方案1】:

您对运算符 T const& data 与 std::ofstream&amp; out。 这是在 MSVC10 中编译的。

template<>
File& File::operator<< <std::ofstream> (const std::ofstream& out)
  {
  mOutPutFile << out;
  return *this;
  }

注意const在函数参数前添加。

【讨论】:

  • 注意这里的ofstream是一个右值——在用法中出现在
  • 这里写的是mOutPutFile,不是std::ofstream& out。
猜你喜欢
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
相关资源
最近更新 更多