C++ 如何为多个流操作创建别名?
在C++98中,有没有办法为下面的行创建一个速记别名C++ 如何为多个流操作创建别名?,c++,c++98,C++,C++98,在C++98中,有没有办法为下面的行创建一个速记别名 std::precision(3) << std::fixed std::precision(3)标准方法可能是创建自定义操纵器: std::ios_base& alias(std::ios_base& str) { str.precision(3); return std::fixed(str); } 然后: STD::CUT什么是C++ 99?@ LexNeasraceSin轨道新的即将到
std::precision(3) << std::fixed
std::precision(3)标准方法可能是创建自定义操纵器:
std::ios_base& alias(std::ios_base& str) {
str.precision(3);
return std::fixed(str);
}
然后:
<代码> STD::CUT什么是C++ 99?@ LexNeasraceSin轨道新的即将到来的2099标准。可能只使用<代码>定义< /C>。这个标准与C++无关。@ Gibbas好像它在世纪之交之前就完成了。漂亮。非常感谢。有没有理由选择这两行而不是返回str@TartanLlamastr
在这里不是一个流,所以我认为这是行不通的。@Holt啊,对。我想如果函数改用std::ostream&
的话,它会工作的,但那不是一般的吗?@TartanLlama是的,你是对的,我总是忘了这个。在本例中,std::ios_base
的唯一优点是它更通用(您可以使您的代码更通用,但它需要一个模板)。我也更喜欢std::ios_base
,因为它是std::fixed
和类似的操纵器使用的。
std::ios_base& alias(std::ios_base& str) {
str.precision(3);
return std::fixed(str);
}
std::cout << alias << 3.16464;
basic_ostream& operator<<(std::ios_base& (*func)(std::ios_base&))
struct alias_t {
int n;
};
alias_t setalias(int n) { return {n}; }
template <class CharT, class Traits>
std::basic_ostream<CharT, Traits>&
operator<<(std::basic_ostream<CharT, Traits>& out, const alias_t& alias) {
return out << std::fixed << std::setprecision(alias.n);
}
// Or if you do not care about genericity:
std::ostream& operator<<(std::ostream& out, const alias_t& alias) {
return out << std::fixed << std::setprecision(alias.n);
}
std::cout << setalias(6) << 3.16464;