C ++
这是尝试创建一个类,它模仿使用<<
的{{1}}运算符的输出行为,只要能够使用ofstream
并写{{1 s关注。该类有一个数据成员,std::endl
指针。该类有两个重载的string
运算符,一个采用ofstream
,另一个采用指向函数的指针,其参数为<<
引用并返回std::string
引用。根据{{3}},这是ostream
的签名。从技术上讲,以下程序适用于给定的输入。它能够打印到文件,由两个ostream
分隔的两行文本。但是,我希望我的非 -string参数重载std::endl
运算符仅接受std::endl
,而不是仅仅匹配其签名的内容。我尝试了将<<
放在参数列表中的各种组合,包括和不包含std::endl
以及有和没有std::endl
,但我得到了每个组合的编译器错误。 C ++ 11的答案也很受欢迎。
*
输出:
&
答案 0 :(得分:2)
如果我查看我的ostream头文件,我会看到endl
:
template<typename _CharT, typename _Traits> inline basic_ostream<_CharT, _Traits>&
endl(basic_ostream<_CharT, _Traits>& __os)
{
return flush(__os.put(__os.widen('\n')));
}
因此看起来您需要继承basic_ostream
才能使其正常工作。不确定你真的想这样做。
答案 1 :(得分:1)
据我所知,在编译时无法将参数强制为特定值
如果不需要编译时强制执行,则可以使用这样的简单断言来强制参数为std::endl
:
assert(static_cast<std::ostream& (*) (std::ostream& os)>(&std::endl) == endlPar);