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

How to create an alias for multiple stream operations?

本文关键字:操作 创建 别名      更新时间:2023-10-16

是否有一种方法可以为c++ 98中的以下行创建一个速记别名?

std::precision(3) << std::fixed

然后按如下方式使用别名:

std::cout << alias << 3.1415926 << std::endl;

标准的方法可能是创建一个自定义操纵符:

std::ios_base& alias(std::ios_base& str) {
    str.precision(3);
    return std::fixed(str);
}

:

std::cout << alias << 3.16464;

参见过载(9)of operator<<:

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;