Есть ли способ создать сокращенный псевдоним для следующей строки в С++ 98?
std::precision(3) << std::fixed
А затем используйте псевдоним следующим образом:
std::cout << alias << 3.1415926 << std::endl;
Есть ли способ создать сокращенный псевдоним для следующей строки в С++ 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) для 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;
return str << std::setprecision(3) << std::fixed;
? Я имею в виду функционально, а не стилистически.
- person TartanLlama; 03.10.2016
str
здесь не поток, поэтому я думаю, что это не сработает.
- person Holt; 03.10.2016
std::ostream&
, но это не было бы таким общим?
- person TartanLlama; 03.10.2016
operator <<
для ostream.
- person Holt; 03.10.2016
std::ostream
уже имеет соответствующую перегрузку. Но неважно, твой ответ все равно лучше :)
- person TartanLlama; 03.10.2016
alias
принимать аргумент, чтобы я мог установить точность в качестве аргумента функции? std::cout << alias(2) << 3.16464
?
- person BigBrownBear00; 03.10.2016
std::ios_base
в этом случае заключается в том, что он более общий (вы можете сделать свой немного более общим, но для этого потребуется шаблон). Я также предпочитаю std::ios_base
, потому что он используется std::fixed
и ему подобным манипулятором.
- person Holt; 03.10.2016
#define
. - person Hatted Rooster   schedule 03.10.2016auto
илиlambda
. c99: en.wikipedia.org/wiki/C99 - person BigBrownBear00   schedule 03.10.2016