2011-07-07 11 views
0

iostreamとfstreamオブジェクトをテンプレート化する方法は?この方法(コードを参照してください)は正しくありません...あなたの助けをありがとう。C++のテンプレート出力:iostreamまたはfstream

template <typename O> 
void test(O &o) 
{ 
    o << std::showpoint << std::fixed << std::right; 
    o << "test"; 
} 

int main(int argc, _TCHAR* argv[]) 
{ 
    std::iostream out1; //Write into console 
    std::ofstream out2 ("file.txt"); //Write into file 
    .... 

    test(out1); 
    test (out2); 

    return 0; 
} 
+0

*完全な*最小サンプルプログラム、およびコンパイルまたは実行時に表示される完全なエラーメッセージを提供してください。方法とその理由については、http://sscce.orgを参照してください。 –

答えて

0

main関数に重大なエラーがありましたが、テンプレート関数が完全に機能しています。あなたのエラーを修正した後、このプログラムは私の作品:

#include <iostream> 
#include <fstream> 


template <typename O> 
void test(O &o) 
{ 
    o << std::showpoint << std::fixed << std::right; 
    o << "test"; 
} 

int main(int argc, char* argv[]) 
{ 
    // std::iostream out1; //Write into console 
    std::ofstream out2 ("file.txt"); //Write into file 
// .... 

    test(std::cout); 
    test (out2); 

    return 0; 
} 

私はなぜわからないんだけど、あなたはしかし、テンプレート機能が欲しいです。通常の多型は、この特定の場合にははるかに意味があります。

+0

あなたの助けをありがとう。 – Johnas

2

2つの問題がここにあります

  1. 任意の出力ストリームに書き込むことができる機能を作るために、あなたはそれのテンプレートにする必要はありません。代わりに、そのパラメータとして参照によってostreamを取るようにしてください。 ostreamはすべての出力ストリームオブジェクトの基本クラスなので、関数は任意の出力ストリームを受け入れることができます。

  2. クラスiostreamは、直接インスタンス化できない抽象クラスです。これは、fstreamやstringstreamなど、読み書きできる他のストリームクラスの基本クラスになるように設計されています。関数を使ってコンソールに出力したい場合は、パラメータとしてcoutを渡します。

希望します。

+0

あなたの有益なコメントをありがとう... – Johnas