如何编写模板函数,其参数类型需要继承某个类

Tim*_*Tim 3 c++ inheritance templates return

是否可以声明一个模板函数,其中某个类型来自于让我们说B?

我的目标是实现这样的目标:

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

template<class T : std::string> void write(T s) {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道这不是一个可靠的例子,因为从字符串派生并不常见,但请注意,这只是一个例子.

因此欢迎任何解决方案,如变通方法,但我希望能够显式实例化模板函数.

Seb*_*edl 9

是的,使用C++ 11 <type_traits>可以实现.
如果你只有C++ 03,你可以改用Boost <type_traits>.

template <typename T>
typename std::enable_if<std::is_base_of<std::ostream, T>::value>::type
write(T& os) {
}
Run Code Online (Sandbox Code Playgroud)