オブジェクトをコマンド ライン (または他の出力ストリーム) に書き込むために、<<
演算子をオーバーロードすることができます。しかし、テンプレートでこれを達成する可能性はありますか? 次のものがあるとします。
template <typename identifier>
class SomeTemplate {
public:
SomeTemplate();
~SomeTemplate();
void addElement(identifier id, unsigned int elem);
unsigend int getElement(identifier id);
private:
std::map<identifier, unsigned int> data_map_;
};
たとえば、タイプの識別子でクラスを特殊化すると、std::tuple<unsigned int, unsigned int, unsigned int>
関数getElement(identifier id)
は一貫性チェックを実行しstd::cout
、要求された要素が に存在しない場合に警告を書き込む必要がありdata_map_
ます。id を単に cout に渡すだけでは機能しません。これは<<
、特殊化に使用される型のオーバーロードされた演算子がない可能性があるためです。これを達成する他の可能性はありますか?おそらく、すべての識別子が<<
演算子をオーバーロードするように強制する純粋な仮想クラスを識別子が実装する必要がある可能性があります。しかし、これは可能ですか?
ご協力いただきありがとうございます。
よろしく