質問

私はアプリケーションの出力マネージャークラスを執筆しています。私のクラスはLinuxの下でG ++で動作しますが、MSVC ++ 2010でコンパイルされません。

これが私のプログラムのSSCCEバージョンです:

#include <iostream>
#include <malloc.h>
#include <sstream>
#include <fstream>

template<class cT, class traits=std::char_traits<cT> >
class BasicE3OutStream: public std::basic_ostream<cT, traits> {
    public:
        BasicE3OutStream() :
                std::basic_ios<cT, traits>(), std::basic_ostream<cT, traits>(0), mBuffer() {
            resetModifiers();
            mLineBuffer=(std::stringstream*) malloc(sizeof(std::stringstream));
            mLineBuffer=new (mLineBuffer) std::stringstream();
        }

        BasicE3OutStream(const BasicE3OutStream<cT,traits> &) {
        }

        virtual ~BasicE3OutStream() {
            delete mLineBuffer;
            mLineBuffer=NULL;
        }

        void resetModifiers() {
            mDebug=false;
            mMemory=false;
        }

        void open(const char* fileName) {
            mBuffer.open(fileName, std::stringstream::out);
        }

        void close() {
            mBuffer.close();
        }

        template<class T>
        BasicE3OutStream& operator<<(T val) {
            (*mLineBuffer)<<val;
            return (*this);
        }

        BasicE3OutStream& operator<<(char* val) {
            (*mLineBuffer)<<val;
            return (*this);
        }

        BasicE3OutStream& operator<<(std::string val) {
            (*mLineBuffer)<<val;
            return (*this);
        }

        void addLineFeed() {
            std::string modifier;
            modifier="";
            if (mDebug)
                modifier+="[DEBUG] ";
            else if (mMemory)
                modifier+="[MEMORY] ";

            mBuffer<<modifier<<mLineBuffer->str()<<"\n";
            mLineBuffer->~basic_stringstream();
            mLineBuffer=new (mLineBuffer) std::stringstream();
            resetModifiers();
        }

        void flush() {
            mBuffer.flush();
            resetModifiers();
        }

        void setFlag(int f) {
            if (f==0)
                mDebug=true;
            else if (f==1)
                mMemory=true;
        }
    public:
        std::basic_ofstream<cT, traits> mBuffer;
        std::stringstream* mLineBuffer;
        bool mDebug, mMemory;
};

template<class cT, class traits, class T>
BasicE3OutStream<cT, traits>& operator<<(BasicE3OutStream<char, traits>& str , T val) {
    str.operator <<(val);
    return (str);
}

typedef BasicE3OutStream<char> E3OutStream;

template<class charT, class traits>
BasicE3OutStream<charT, traits>& endl(BasicE3OutStream<charT, traits>& os) {
    os.addLineFeed();
    return (os);
}

template<class charT, class traits>
BasicE3OutStream<charT, traits>& flush(BasicE3OutStream<charT, traits>& os) {
    os.flush();
    return (os);
}

template<class charT, class traits>
BasicE3OutStream<charT, traits>& debug(BasicE3OutStream<charT, traits>& os) {
    os.setFlag(0);
    return (os);
}

template<class charT, class traits>
BasicE3OutStream<charT, traits>& memory(BasicE3OutStream<charT, traits>& os) {
    os.setFlag(1);
    return (os);
}

/**
 * Io manipulator, allows to use endl and other modificators
 */
template<class charT, class traits> BasicE3OutStream<charT, traits>& operator<<(
        BasicE3OutStream<charT, traits> &s
        , BasicE3OutStream<charT, traits>& (*iomanip)(BasicE3OutStream<charT, traits>&)) {
    return (iomanip(s));
}


int main() {
    E3OutStream s;
    s.open("output.txt");
    s<<debug<<"Debug info"<<endl;
    s<<flush;
    s<<memory<<"Memory info"<<endl;
    s<<flush;
    s.close();
}

G ++では正常に実行されますが、MSVCではコンパイラエラーが発生します。

1>------ Build started: Project: sscce, Configuration: Debug Win32 ------
1>  main.cpp
1>c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(129): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(726): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(764): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(811): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(937): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(944): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(951): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(958): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(1085): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(43): or       'BasicE3OutStream<cT> &BasicE3OutStream<cT>::operator <<(char *)'
1>          with
1>          [
1>              cT=char
1>          ]
1>          c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(48): or       'BasicE3OutStream<cT> &BasicE3OutStream<cT>::operator <<(std::string)'
1>          with
1>          [
1>              cT=char
1>          ]
1>          while trying to match the argument list '(E3OutStream, overloaded-function)'
1>c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(130): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(726): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(764): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(811): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(937): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(944): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(951): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(958): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(1085): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(43): or       'BasicE3OutStream<cT> &BasicE3OutStream<cT>::operator <<(char *)'
1>          with
1>          [
1>              cT=char
1>          ]
1>          c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(48): or       'BasicE3OutStream<cT> &BasicE3OutStream<cT>::operator <<(std::string)'
1>          with
1>          [
1>              cT=char
1>          ]
1>          while trying to match the argument list '(E3OutStream, overloaded-function)'
1>c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(131): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(726): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(764): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(811): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(937): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(944): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(951): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(958): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(1085): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(43): or       'BasicE3OutStream<cT> &BasicE3OutStream<cT>::operator <<(char *)'
1>          with
1>          [
1>              cT=char
1>          ]
1>          c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(48): or       'BasicE3OutStream<cT> &BasicE3OutStream<cT>::operator <<(std::string)'
1>          with
1>          [
1>              cT=char
1>          ]
1>          while trying to match the argument list '(E3OutStream, overloaded-function)'
1>c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(132): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(726): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(764): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(811): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(937): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(944): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(951): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(958): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(1085): or       'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const std::error_code &)' [found using argument-dependent lookup]
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(43): or       'BasicE3OutStream<cT> &BasicE3OutStream<cT>::operator <<(char *)'
1>          with
1>          [
1>              cT=char
1>          ]
1>          c:\users\guillaume\documents\visual studio 2010\projects\sscce\sscce\main.cpp(48): or       'BasicE3OutStream<cT> &BasicE3OutStream<cT>::operator <<(std::string)'
1>          with
1>          [
1>              cT=char
1>          ]
1>          while trying to match the argument list '(E3OutStream, overloaded-function)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

どんな助けも大歓迎です、Guillaume

編集

このアドバイスが与えられたおかげで、私はすでにメンバー変数としてofstreamを持っているので、その場合、ioStreamを拡張することは役に立たないことを理解することができました。 STDライブラリの内部作業を十分に知らないので、クラスを独立して、MSVCとG ++の両方で働いた。

#include <iostream>
#include <malloc.h>
#include <sstream>
#include <fstream>

class BasicE3OutStream {
    public:
        BasicE3OutStream() :
                mBuffer() {
            resetModifiers();
            mLineBuffer=(std::stringstream*) malloc(sizeof(std::stringstream));
            mLineBuffer=new (mLineBuffer) std::stringstream();
        }

        BasicE3OutStream(const BasicE3OutStream &) {
        }

        virtual ~BasicE3OutStream() {
            delete mLineBuffer;
            mLineBuffer=NULL;
        }

        void resetModifiers() {
            mDebug=false;
            mMemory=false;
        }

        void open(const char* fileName) {
            mBuffer.open(fileName, std::stringstream::out);
        }

        void close() {
            mBuffer.close();
        }

        template<class T>
        BasicE3OutStream& operator<<(T val) {
            (*mLineBuffer)<<val;
            return (*this);
        }

        void addLineFeed() {
            std::string modifier;
            modifier="";
            if (mDebug)
                modifier+="[DEBUG] ";
            else if (mMemory)
                modifier+="[MEMORY] ";

            mBuffer<<modifier<<mLineBuffer->str()<<"\n";
            mLineBuffer->str("");
            resetModifiers();
        }

        void flush() {
            mBuffer.flush();
            resetModifiers();
        }

        void setFlag(int f) {
            if (f==0)
                mDebug=true;
            else if (f==1)
                mMemory=true;
        }
    public:
        std::ofstream mBuffer;
        std::stringstream* mLineBuffer;
        bool mDebug, mMemory;
};

BasicE3OutStream& endl(BasicE3OutStream& os) {
    os.addLineFeed();
    return (os);
}

BasicE3OutStream& flush(BasicE3OutStream& os) {
    os.flush();
    return (os);
}

BasicE3OutStream& debug(BasicE3OutStream& os) {
    os.setFlag(0);
    return (os);
}

BasicE3OutStream& memory(BasicE3OutStream& os) {
    os.setFlag(1);
    return (os);
}

/**
 * Io manipulator, allows to use endl and other modificators
 */
BasicE3OutStream& operator<<(
        BasicE3OutStream &s
        , BasicE3OutStream& (*iomanip)(BasicE3OutStream&)) {
    return (iomanip(s));
}


typedef BasicE3OutStream E3OutStream;

int main() {
    E3OutStream s;
    s.open("output.txt");
    s<<debug<<"Debug info"<<endl;
    s<<flush;
    s<<memory<<"Memory info"<<endl;
    s<<flush;
    s.close();
}
役に立ちましたか?

解決

問題の核心は、Function Pointersをストリームに送信していることです。GCCは処理方法を知っているようですが、MSVC ++はそうではありません。いずれにせよ、私はあなたがの住所を保存したいと思っているとは思わない debug/endl/flush/memory 機能。

次の解決策は、それらを作成することです オブジェクト 表示する関数の代わりに。

ただし、aがあります 多く このコードが間違っています。つまり、すでに存在します endlflush 使用する必要があるオブジェクト。また、それぞれ BasicE3OutStream もっている 基礎となるストリーム、それが継承したもの、すべての機能が作業する( endl そして、それはあなたがそれらを交換した理由だと思います)、そして mBuffermLineBuffer, 、(あなたがしていることにはメンバーのどちらも必要ありません)。 (別のサイドノート、ストリングスリームをリセットします mLineBuffer.str("");, 、配置されていない新しい)

あなたがやりたいことをする簡単な方法は、それぞれをオーバーロードすることです operator<< Aのメンバー basic_ostream, 、そして新しいラインがある場合はどこでも挿入します [DEBUG] また [MEMORY] AppReateとして、バッファする必要はありません。 (私はこれをしました、それはクレイジーではありません)

おそらくあります 異なるchar特性を持つストリームを使用したり、特定の仮想関数を過負荷にしたり、バッファーを交換したりすることでこれを行う方法ですが、ストリームは複雑で、私はこれを知りません 仕方。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top