C++ のコード生成結果には scanf と std::cin が混ざっているのをやめたい
統一される (文字列の場合があるので std::cin になる) と嬉しくて、選択可能になるともっとうれしいです。速度の問題で cin.tie(0) をしたりしなかったりとか、出力結果を加工してさらに何かするときの都合です。
実装の選択肢は以下のふたつになると思います。template は言語ごとに独立なので定義される値を足しても困ることはなく、実装や利用の単純さから後者がよいはずです。
- code generator を追加する
-
{{input_part}}だけでなくて{{input_part_cin}}{{input_par_scanf}}を用意する
確かに混ざってるのは良くないですね。既存のテンプレートの後方互換性は維持したいので、cppのコードジェネレーターに新しいテンプレートパラメータを追加する方向性が良さそうです。
互換性の維持は重要ですが、今回の提案は (2.) でも互換性を破壊するようなものではないです。
{{input_part}} という変数を消すとまずいですが、そうでなくてその値を変えるだけだからです。
たしかに出力は文字列としては変化しますがその実際的な意味は変わりません。 (ただしもしこれが「すべて cin を使ってた場合に scanf に乗り換える」だと cin.tie(0) のまわりで互換性の検討が必要です)
あ、かなり僕がよくわからないコメントを書いていたことが今わかりました。すみません忘れてください。
僕は提案2が好きで賛成です。 2つ目のコードジェネレーターをこさえるのは1はちょっとやりすぎな気がするので。
ドキュメントも最近テンプレート用のページを作ったので、言語ごとに使えるテンプレート変数一覧みたいなのをドキュメントに書けばユーザーとしてもわかりやすいはずです。
@blue-jam そのREの直接の原因はatcoder-tools側の仕様ではなくカスタムされたtemplate側の ios::sync_with_stdio(false); https://cpprefjp.github.io/reference/ios/ios_base/sync_with_stdio.html なので、その主張はあまり適切ではなさそうに読めます。
ただし「ios::sync_with_stdio(false); を意味を知らずにコピペする人は多いので統一してあげるとやさしい」という意図ならまったく同意します。
「ios::sync_with_stdio(false); を意味を知らずにコピペする人は多い
私のことです