【发布时间】:2015-06-04 01:41:34
【问题描述】:
我有以下代码...
#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 运算符的特化。
【问题讨论】:
-
虽然可怕,
operator << <eTag::A>(std::cout, 42) << std::endl;。我更好奇为什么你会想要这样做。 ` -
@Pradhan 并不是真正的骗子,对吧?由于您链接的问题主要是关于为基本类型重载
operator+。 -
你的操作符有两个参数。你给了它一个。对我来说似乎很清楚!
标签: c++ templates operators specialization