Şu anda std::stringstream
için bir sarmalayıcı yazıyorum ve tüm operator<<
çağrılarımı sınıfım aracılığıyla std::stringstream
'a iletmek istiyorum. Bu şimdi sadece (bu soruya teşekkürler: wrapper class for STL stream: forward operator<< calls), ama yine de onunla ilgili bir sorun var.iostream için C++ sarmalayıcı sınıfı, işleçle birlikte std :: endl gibi akış değiştiricilerini kullanın <<
en Aşağıdaki kod var diyelim:
class StreamWrapper {
private:
std::stringstream buffer;
public:
template<typename T>
void write(T &t);
template<typename T>
friend StreamWrapper& operator<<(StreamWrapper& o, T const& t);
// other stuff ...
};
template<typename T>
StreamWrapper& operator<<(StreamWrapper& o, T const& t) {
o.write(t);
return o;
}
template<typename T>
void StreamWrapper::write(T& t) {
// other stuff ...
buffer << t;
// other stuff ...
}
Bunu şimdi ise: Bu sadece iyi çalışır
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff";
. Ancak gibi akış değiştiricilerini kullanmak istiyorum, bu http://www.cplusplus.com/reference/ios/endl'a göre bir işlevdir, ben sadece derlemem.
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff" << std::endl;
Neden? Akış değiştiricilerini nasıl iletebilirim?
derleme hatası nedir? –
Bir işleve sahip olan işleç << << 'aşırı yükleri vardır ve daha sonra akışta bu işlevi çağırın: http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt http: //en.cppreference .com/w/cpp/io/manip – BoBTFish