3

特定の型が B から派生したテンプレート関数を宣言することは可能ですか?

私の目標は、次のようなことを達成することです。

template<class T : std::ostream> void write(T os) {
    os << "...";
} 

template<class T : std::string> void write(T s) {
   // ...
}

編集:文字列から派生することは通常ではないため、これが堅実な例ではないことはわかっていますが、これは単なる例であることに注意してください。

したがって、回避策のような解決策は大歓迎ですが、テンプレート関数を明示的にインスタンス化できるようにしたいと考えています。

4

2 に答える 2

9

はい、C++11 を使用<type_traits>すると実現できます。
C++03 しかない場合は、<type_traits>代わりに Boost を使用できます。

template <typename T>
typename std::enable_if<std::is_base_of<std::ostream, T>::value>::type
write(T& os) {
}
于 2013-06-19T16:04:09.397 に答える
0

std::ostream から派生した任意のオブジェクトをパラメーターとして使用できます。

void write(std::ostream os) {
    os << "...";
} 
于 2013-06-19T16:14:50.007 に答える