Estou tentando chegar ao ponto em que essencialmente MyClass(A) << "hi " << 17 << std::endl;
compila e executa MyClass::finish()
o método no fluxo acumulado. Até agora, ainda estou preso na parte "compila". Aqui está o que tenho até agora
#include <iostream>
#include <sstream>
#include <string>
enum foo
{
A,
B,
C
};
class MyClass
{
public:
MyClass(foo v) : v_(v), oss_()
{
}
MyClass& operator<<(std::ostream &o)
{
oss_ << o;
return *this;
}
private:
foo v_;
std::ostringstream oss_;
};
int main()
{
MyClass(A) << "hi " << 17 << std::endl;
return 0;
}
Estou indo pelo caminho errado?
Seu
operator<<
está implementado errado. Ele não deve aceitar outroostream
como entrada. Em vez disso, ele precisa aceitar todos os tipos que você deseja transmitir para sua classe e encaminhar para seu internoostringstream
. Você pode usar um modelo para simplificar isso, por exemplo:A primeira sobrecarga manipula tipos de dados, e a segunda sobrecarga manipula manipuladores de fluxo como
std::endl
, que são implementados como funções.E então, você pode chamar
finish()
seu~MyClass
destruidor.Demonstração ao vivo