У меня есть следующий код ...Вызывающего специализировано 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
Хотя отвратительный, 'operator << (std :: cout, 42) << std :: endl; '. Мне любопытно, почему ты хочешь это сделать. ' –
WhozCraig
@Pradhan не совсем обман, не так ли? Поскольку связанный с вами вопрос в основном говорит о перегрузке «operator +» для основных типов. – vsoftco