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

时间:2013-06-19 15:57:37

标签: c++ templates inheritance return

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

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

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

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

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

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

2 个答案:

答案 0 :(得分: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) {
}

答案 1 :(得分:0)

从std :: ostream派生的任何对象都可以用作

的参数
void write(std::ostream os) {
    os << "...";
}