0

関数パラメーターを持ち、その型が何であるかを気にしないことは可能かどうか疑問に思っています。たとえば、<<演算子をオーバーライドしたクラスがあります。ただし、それが行う唯一のことは、パラメータをプライベートostringstreamに追加することです。

CLog& CLog::operator <<(const char * txt) {
    buffer << txt;
    return *this;
}

ただし、これではconstcharをバッファに書き込むことしかできません。パラメータを任意のタイプでostringstream <<受け入れる必要があります。それは可能ですか?

4

4 に答える 4

5

テンプレートを使用できます。

template <typename T>
CLog& CLog::operator <<(const T& p) {
    buffer << p;
    return *this;
}
于 2013-03-23T14:55:48.527 に答える
1

これは、テンプレートを使用して実行できます。

template <class T>
Clog& Clog::operator <<(const T& t) {
    buffer << t;
    return *this;
}
于 2013-03-23T14:55:51.337 に答える
1

この場合はを使用できますtemplate

template<class T>
CLog& Clog::operator <<(const T& value) {
    buffer << value;
    return *this;
}

ただし、無効なものは渡さないようにしてくださいofstringstream

于 2013-03-23T14:55:54.527 に答える
0

他の答えは基本的に正しいですが、移動操作をサポートしていません。使用する

template <typename T>
CLog& CLog::operator <<(T&& p) {
    buffer << std::forward<T>(p);
    return *this;
}
于 2013-03-23T14:58:18.527 に答える