Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为多个流操作创建别名?_C++_C++98 - Fatal编程技术网

C++ 如何为多个流操作创建别名?

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轨道新的即将到

在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轨道新的即将到来的2099标准。可能只使用<代码>定义< /C>。这个标准与C++无关。@ Gibbas好像它在世纪之交之前就完成了。漂亮。非常感谢。有没有理由选择这两行而不是返回str@TartanLlama
str
在这里不是一个流,所以我认为这是行不通的。@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;