2016-01-26 15 views
28

this講義では、スピーカーは標準ライブラリに純粋な仮想関数がない(または何も認識していない)ことを冒頭で述べています。私はAlex Stepanovがこの言語機能に反対していたと考えていますが、最初のSTLデザイン以来、純粋なバーチャルを標準ライブラリに忍び込ませていますか?C++標準ライブラリに純粋仮想関数がありますか?

FWIW(私が間違っていると私を修正します)ユニークなポインタの中の削除者は最終的にほとんどの実装で仮想ディスパッチを使用しますが、これらは純粋な仮想ではありません。

+0

標準ライブラリ全体か、単に 'STL'(イテレータ、アルゴリズム、コンテナ)部分だけを意味しますか? – Galik

+0

私は、標準ライブラリの純粋仮想関数を認識していません。 'unique_ptr'のデフォルトのdeleterは非常に非仮想的なので、非多型の基底クラスにキャストすると安全ではありません。一方、 'shared_ptr'は元のポインタで型消去されたdeleter関数を保持していますので、そのように安全です。 –

+0

純粋仮想関数を持つクラスはインスタンス化できません。私は、基底クラスとして使用されるだけで、直接使用できない標準クラスは認識していません。 –

答えて

51

は[syserr.errcat.overview] C++ 14には他のものはありませんstd::error_category

class error_category { 
    virtual const char* name() const noexcept = 0; 
    virtual string message(int ev) const = 0; 
}; 

有します。

+0

あなたは他の人がいないことをどのように確信していますか?ちょっと興味があるんだけど。 (P.S. +1) – Nemo

+16

@Nemo第17章以降の標準のテキストを '= 0'で検索しました。ヒットごとに目を覚ます(多くはない)。実際の仕事をやり遂げるのを止める良い理由。 –

+2

'std :: function'の典型的な実装は、純粋な仮想関数を実装の詳細として使用することに注意してください(または、CスタイルのOOと同等のものを再現します)。これは、将来および他の実行時コンセプト/タイプ消去タイプについても同様である。 – Yakk

関連する問題