Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

非メンバ関数mdファイルの適切な配置位置 #245

Closed
yohhoy opened this issue Jan 16, 2015 · 9 comments
Closed

非メンバ関数mdファイルの適切な配置位置 #245

yohhoy opened this issue Jan 16, 2015 · 9 comments
Assignees
Labels

Comments

@yohhoy
Copy link
Member

yohhoy commented Jan 16, 2015

<utility>ヘッダmake_pair関数テンプレートの位置がおかしい気がします。pairクラステンプレートのメンバではないため、utility直下にあるべき?

@yohhoy
Copy link
Member Author

yohhoy commented Jan 16, 2015

tuplemake_tupleの関係も同様になっていました。この構造は意図的でしょうか?(であればcloseしてください)

@faithandbrave
Copy link
Member

統一はできていないのですが、非メンバ関数は基本的に、関連するクラスのディレクトリに置こうと思っています。

ヘッダのディレクトリに置くのは、swapや比較演算子の場合に問題になります。swap_for_pairとかのファイル名にはしたくないので。

@faithandbrave
Copy link
Member

ちなみに、<chrono>の場合、算術・比較演算子をヘッダのディレクトリに置いていますが、これはdurationtime_pointの組み合わせがあるからです。このあたりが悩みどころです。

@yohhoy
Copy link
Member Author

yohhoy commented Jan 16, 2015

ヘッダのディレクトリに置くのは、swapや比較演算子の場合に問題になります。swap_for_pairとかのファイル名にはしたくないので。

確かに非メンバ関数を一律ヘッダ直下にしてしまうと、ファイル名衝突のリスクもありますね…

結局、ケース・バイ・ケースでよきに計らいましょうという雰囲気でしょうか。

@yohhoy yohhoy changed the title utility/pair/make_pair.md -> utility/make_pair.md 非メンバ関数mdファイルの適切な配置位置 Jan 16, 2015
@yohhoy
Copy link
Member Author

yohhoy commented Jan 16, 2015

以後、類似ケースで参照されることも考えて、issueタイトルを一般化しました。

@yohhoy yohhoy added question and removed question labels Jan 16, 2015
@faithandbrave
Copy link
Member

結局、ケース・バイ・ケースでよきに計らいましょうという雰囲気でしょうか。

今のところ、ぼくから提案する方針としては、以下のようになります:

  • 基本的に、非メンバ関数は関連するクラスのディレクトリにページを置く
  • 複数のクラスが対象となる非メンバ関数(swapや算術演算子、比較演算子など)については、それらの上位ディレクトリ(ヘッダのディレクトリ)にページを置く

この「基本的に」が曖昧で、たとえば<string>ヘッダのto_string()系関数は、ヘッダのディレクトリにあってもいいのではないかと思っています。これは、to_string()の反対にあるstoi()関数が、将来的に別の文字列型をパラメータとして受け取ることを想定してもいいのではないか、という考えからです。(そんなことはないかもしれない)
このようなケースは、関数単位で議論があっていいと思います。

「基本的に」に含まれると考えている部分で統一できていないところは、ぼくが把握している範囲では以下です:

  • <utility>ヘッダにある、pair用のget()関数
  • <system_error>ヘッダにある、ヘルパ関数と出力ストリーム演算子

@melpon
Copy link
Member

melpon commented Jan 16, 2015

http://www.cplusplus.com/reference/utility/pair/ の非メンバのところを見ると「Non-member function overloads」とか書いてたりしますね。
これに倣うなら、クラス毎にオーバーロードして使うことを意図してる関数(これが複数のクラスに跨ったりはしないと思いたい)はクラス内に、そうでないのは外に、ということになりそうですね。

@faithandbrave
Copy link
Member

ぼくは関連性でまとめていましたが、オーバーロードを意図しているか否かでまとめると、明確でよさそうですね。そうしましょうか。

その方針にする場合は、以下のように修正することになります。

  • make_pair()を、<utility>ヘッダの直下に置く。
  • <utility>ヘッダのページに、make_pair()へのリンクを書く
  • pairクラスのページに、「##非メンバ関数」の下に「###ヘルパ関数」という分類を作ってmake_pairへのリンクを貼る(これはcplusplus.comではSee alsoにあたるもの)。
  • pairgetは、オーバーロードを意図しているのでpair下に移動する。
  • <chrono>の演算子は、置く場所は変えられないので、durationtime_pointそれぞれのページからリンクを貼って、ヘッダページからのリンクは外す。

ここでgetを「オーバーロードを意図しているもの」とみなしていますが、このようなケースは、議論の余地あり、という方針にしていいと思います。

@faithandbrave faithandbrave self-assigned this Jan 19, 2015
faithandbrave added a commit that referenced this issue Jan 19, 2015
オーバーロード/特殊化を意図している非メンバを、pairディレクトリに移動。
そうではない非メンバ関数であるmake_pairを、utilityディレクトリに移動。
faithandbrave added a commit that referenced this issue Jan 19, 2015
オーバーロードを意図している演算子を、各クラスのディレクトリに移動。ただし、複数のクラスを組み合わせる演算子は、ヘッダのディレクトリに残し、各クラスのページからリンクを貼るようにした。
faithandbrave added a commit that referenced this issue Jan 19, 2015
オーバーロードを意図していない非メンバ関数を、クラスのディレクトリではなく、ヘッダのディレクトリに移動した。
@faithandbrave
Copy link
Member

現在判明している、pair、chrono、tupleについて、上記方針で対応しました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants