[英]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
}
您可以:
但是,所有这些都是有限的-它们都需要您了解不同的流类型,并且如果其中任何一个需要在模板化类中进行特殊处理,您以后可能会发现需要添加另一个,并且最好是另一个。应该比这更广泛地工作。
由于标准库中的流类都派生自一个共同的祖先,因此另一个选择是不使用模板,而是在提供所需功能并依赖多态性的级别上接受对祖先类型的指针或引用。 同样,如果需要,这提供了使用重载专门针对特定类型的可能性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.