是否可以声明一个模板函数,其中某个类型派生自 B?
我的目标是实现这样的目标:
template<class T : std::ostream> void write(T os) {
os << "...";
}
template<class T : std::string> void write(T s) {
// ...
}
编辑:我知道这不是一个可靠的示例,因为通常不从字符串派生,但请注意,这只是一个示例。
因此,任何像解决方法这样的解决方案都是受欢迎的,但是我希望能够显式实例化模板函数。
是的,使用C++11
<type_traits>
可以实现。<type_traits>
来代替。
template <typename T>
typename std::enable_if<std::is_base_of<std::ostream, T>::value>::type
write(T& os) {
}
任何从 std::ostream 派生的对象都可以用作
的参数void write(std::ostream const& os) {
os << "...";
}