繁体   English   中英

如何确定C ++中的当前流类型?

[英]How to determine current stream type in c++?

我在c ++中使用模板,并且将流对象作为模板化参数传递。 如何在运行时知道当前的流类型?

模板是一种编译时结构,因此“运行时”无需执行任何操作。 但这更好。 可能最惯用的方式是使用char_traits

template <typename TChar, typename Traits>
void foo(std::basic_ostream<TChar, Traits> & o)
{
  // use `Traits` in here
  // e.g. Traits::char_type
}

您可以:

  • 尝试对您可能感兴趣的流类型进行dynamic_cast <>,并查看哪些类型成功
  • 使用typeid并与已知类型进行比较
  • 要求模板的用户传递一个附加参数,说明流类型是什么
  • 为需要不同处理的特定流类型提供模板专业化

但是,所有这些都是有限的-它们都需要您了解不同的流类型,并且如果其中任何一个需要在模板化类中进行特殊处理,您以后可能会发现需要添加另一个,并且最好是另一个。应该比这更广泛地工作。

由于标准库中的流类都派生自一个共同的祖先,因此另一个选择是不使用模板,而是在提供所需功能并依赖多态性的级别上接受对祖先类型的指针或引用。 同样,如果需要,这提供了使用重载专门针对特定类型的可能性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM