2011-12-18 12 views
2

でメンバ関数を抽象化。は異なる戻り値の型

getStream()をインターフェイスの一部にしてFileIOBaseに移動する方法はありますか?

+1

あなたができれば、どのような:その場合は、あなたは、基本クラスでgetStreamios&を返すことができ、その後、あなたは彼らがios&との共変であるため、特定の機能がfstream&ifstream&ofstream& sを返しますことができますあなたは 'FileIOBase :: getStream()'の結果をどうしたいですか? –

+1

@OliCharlesworth 'FileIOBase'は抽象型であるため、おそらく純粋な仮想であると私には思われます。 (実際にそれを実装するのに役立つわけではありませんが、意味論的な質問に答えるでしょう) –

+0

何もありません!私はそれをインターフェイスに追加して派生クラスによる実装を強制したいだけです。私はそれらを派生クラスに通常のメンバーとして追加できることを知っています。派生クラスの数が限られているので実際には理にかなっていますが、私は興味があります! – p00ya00

答えて

3

私はあなたがそれらの値を参照の代わりに参照することを意味すると思います。

class FileIOBase 
{ 
    ... 
    bool open(const std::string &path); 
    bool isOpen() const; 
    void close(); 

    virtual ios& getStream() = 0; 
    ... 
}; 

class InputFile : FileIOBase 
{ 
    size_t read(...); 
    ifstream& getStream(); 
}; 

class OutputFile : FileIOBase 
{ 
    size_t write(...); 
    ofstream& getStream(); 
}; 

class InputOutputFile : virtual InputFile, virtual OutputFile 
{ 
    fstream& getStream(); 
}; 
+2

+1のように問題を解決する答えです。今OPはこれが実際にそれらに有用な目的を果たすかどうかを把握する必要があります... –

+0

このような状況のための一般的な解決法はありますか?例えば、一般的なプログラミング技術を使用している。 – p00ya00

+0

@ p00ya00どういう意味ですか? –

関連する問題