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

问题描述 投票:0回答:2

是否可以声明一个模板函数,其中某个类型派生自 B?

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

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

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

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

因此,任何像解决方法这样的解决方案都是受欢迎的,但是我希望能够显式实例化模板函数。

c++ templates inheritance return
2个回答
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) {
}

0
投票

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

的参数
void write(std::ostream const& os) {
    os << "...";
} 
© www.soinside.com 2019 - 2024. All rights reserved.