code
C++
1 2#include <iostream> 3#include <cstdio> 4#include <type_traits> 5 6struct scn 7{ 8 template <typename T> 9 auto operator >>(T& val) -> std::enable_if_t<std::is_same<T, double>::value, scn&> 10 { 11 std::scanf("%lf", &val); return *this; 12 } 13}; 14 15struct pri 16{ 17 template <typename T> 18 auto operator <<(T& val) -> std::enable_if_t<std::is_floating_point<T>::value, pri&> 19 { 20 std::printf("%f", val); return *this; 21 } 22}; 23 24int main() { 25 double d; scn() >> d; pri() << d; 26 return 0; 27}
problem
仮に上記のようなコードがあったとします。 iomanip を使ってcout << fixed << setprecision(n)
で小数点以下の桁数を指定するように、pri() << setprecision(n)
で小数点以下の桁数を指定するようにしたいのです。fixed
は %f で実現していますがsetprecision(n)
の実装方法が分かりません。 cin/cout を使わずにできる実装をご教示頂きたいです。printf
は変えずに %f の部分がpri() << setprecision(n)
で %.(n)f となるような