我有以下代码...调用专门的ostream操作
#include <sstream>
enum class eTag
{
A,
B,
C
};
template<eTag I> std::ostream& operator<< (std::ostream& str, int i)
{
return str; // do nothing
}
template<> std::ostream& operator<< <eTag::A>(std::ostream& str, int i)
{
return str << "A:" << i; // specialize for eTag::A
}
template<> std::ostream& operator<< <eTag::B>(std::ostream& str, int i)
{
return str << "B:" << i; // specialize for eTag::B
}
template<> std::ostream& operator<< <eTag::C>(std::ostream& str, int i)
{
return str << "C:" << i; // specialize for eTag::C
}
int main()
{
std::ostringstream s;
// s << <eTag::A>(42) << std::endl;
return 0;
}
这编译。但是从main()的注释行中可以看到,我正在为如何实际调用ostream操作符的专门化而苦恼。
可能重复的是它不可能手动调用C++操作符?](http://stackoverflow.com/questions/7225962/is-it-not-possible-to-call-c-operators-manually) – Pradhan 2015-03-30 21:22:44
虽然可怕,但运营商<<(std :: cout,42)<< std :: endl;'。我更好奇*为什么*你想这样做。 ' –
WhozCraig
2015-03-30 21:24:09
@Pradhan不是真的很愚蠢,对吧?正如你所关联的问题主要是关于为基本类型重载'operator +'。 – vsoftco 2015-03-30 21:30:46