年末大行進です。
cppconの動画が上がっていました。
C++の長い旅も終わりに近づいているようですね。
さて。
先日、
ヘッダファイルにクラスの実装まで書くのはC++として普通の書き方なのか?
という謎の質問と答えを眺めていて首を傾げていたごみためまんです、どうも。
私はPlural辺りでスキル判定すると中の上くらいなので、いちおう中級者としてコメントしておきます。
ヘッダーにクラスを丸ごとを書くのは、
分割コンパイルを否定することになる
ので、本来はよろしくないとは知っています。リーマン時代にもパイセンにくぎを刺されました。ですが、
インタフェースをヘッダに書きながら決めていくような場合
には、ヘッダに書きます。短いgetter/setteもヘッダに書きがちです。後で実装部分を.cppファイルに移動します。
頭の中で全行イメージできる脳容量のあるタイプのハカーならそんな2度手間は不要ですが、ペアプロやグループ作業では必要な手間のような気もします。
ただ、いまどきのIDEなら、リファクタリング機能でそんなことはお茶の子さいさいのはずで、手間もかからないはずですが。
というわけで、この問題にこだわる人がいたとしたら、
初級か入門者認定されてしかるべき、つまりそんな質問は放っておけばよい
という気がします。
あと、注意点として、中級者以上が「ヘッダに実装を書く」と聞いたら、以下のようにイメージしますが、初級者、入門者は違う場合があるので注意が必要です。
・(1)中級者のイメージ
hoge.h
class Cfuga {
Cfuga() {}; // 実装も書いちゃえ
・・・
};
・(2)初級者の謎のイメージ
blah.h
class Cblah {
Cblah();
・・・
}
Cblah::Cblah() {
// ここまで書くなら、.cppに書けよ www
}
つまり、初級者・入門者が上記の(2)の謎イメージの話をあ~でもないこ~でもないと議論しているところへ、自称中級者が(1)のイメージを勝手に抱いて・・・
おいおい、ヘッダに実装を書くのは完全に合法だゾ!
#includeされた数だけ関数が生成されるとか、いったい何十年前の話をしているんだ!
などと顔を真っ赤にして割り込んでいくと、スカを食らうということです。
—-x8—-x8—-x8—-x8—-x8—-x8—-x8—-x8
Modern C++にを踏まえた上級者としては、上記の動画でも触れられているimportの話をして煙に巻くのがちょうどよいです。
翻訳単位も、高速リンカも過去のものになりつつあるということですね キラ☆彡
SAYONARA Incredibuild!