我在c ++中使用模板,并且我将流对象作为模板化参数传递。如何在运行时知道当前的流类型?
答案 0 :(得分:1)
模板是一个编译时构造,所以“在运行时”没有任何关系。但那甚至更好。可能最惯用的方法是使用char_traits
:
template <typename TChar, typename Traits>
void foo(std::basic_ostream<TChar, Traits> & o)
{
// use `Traits` in here
// e.g. Traits::char_type
}
答案 1 :(得分:0)
你可以:
然而,所有这些都是限制性的 - 它们都要求您了解不同的流类型,如果它们中的任何一个需要在模板化类中进行特殊处理,您可能会在以后发现需要添加另一个,另一个...理想情况下,模板应该比这更普遍。
由于标准库中的流类都派生自一个共同的祖先,另一个选择是不使用模板,而是在提供所需功能并依赖多态的级别接受指向祖先类型的指针或引用。同样,如果需要,这可以使用重载来专门针对特定类型。