feature image

2024年4月11日 | ブログ記事

「実用C++ハンズオン」を開催しました

こんにちは。19の@kegraと言います。
先月にtraP内で「実用C++ハンズオン」という講習会を開催しました。

これはどんな講習会?

C++(あるいはC言語)をアプリ開発に実用するための知識を学んでいく講習会です。

C++はちゃんと使えば決して悪くない言語なのですが、駆け出しレベルのエンジニアにとっては、現状どうしても以下のような用途に絞られてしまっています。

なぜC++はUnityやJavaScriptやPythonのように「実アプリを作って面白がりながら勉強する」立ち位置にあまりいないのでしょうか?[1]自分が思うに、それは「ファイル分割をする」「その辺で拾ったライブラリを適当に組み合わせる」ということをするためのハードルが高いせいだと考えています。
あとC言語からの類推に基づく「newしたら自分でdeleteしなければならない」みたいな誤解...[2]

逆に、そこさえ解決すれば多少の規模のあるアプリ開発をしたり、拾ったライブラリを使って巨人の肩に乗る開発が初心者にも可能になってくるであろうと思うわけです。

ということで、C++初心者が中級者にレベルアップするための知識セットをハンズオン形式で紹介しました。

開催内容

ちょっと口頭で補足した部分も多いので資料は外部に見せられるほど整ってはいませんが、第1回だけはそこそこ真面目にスライドを作ったのでここに置いておきます。分割ビルド分かんないよ~~って人は読むと多少の参考になるかもしれません。

ダウンロード(PDF形式)

学習者の中にはコンパイルエラーが苦手と言う人が多いので、「こういうことをするとこういうエラーが出るよ。実際にやってみよう」みたいな話も入れました。コンパイルエラーは友達!

4/12 追記: スライドp51~57に誤った内容が含まれていることが指摘されたため、お詫びして訂正いたします。

グローバルや無名でない名前空間内に書かれた一般のクラス/構造体類、テンプレート、インライン関数は内部リンケージでなく外部リンケージを持ちます。[3]もしそうでなければ同じクラス型を扱う関数が複数の翻訳単位に作れることも説明できなくなってしまうはず...)

これらが複数の翻訳単位に書かれた上でエラーにならないのはある種の例外規定によるものであり、コンパイルの仕組みの都合上、各翻訳単位に1つずつ同じものが定義されている分には複数の定義が許されています。[4]
参考: Stack Overflow, Wikipedia

今後の開催

またいずれtraP内で開催すると思います。(もうちょっとお外にも見せられるくらいに資料を整備してあげた上でやりたいですね)

traPの講習会には、未経験者の人が最初の1歩を学ぶための「01講習会」とそれ以外の普通の講習会があります。「実用C++ハンズオン」は普通の講習会の方に分類されるものです。

01講習会のひとつとして「プログラミング基礎講習会」(リンク)というものがあり、ここでプログラミングの入門として基礎的なC++を学ぶことができます。

多くの人はプログラミング基礎講習会の後はUnityとC#でゲーム開発を学んだり、GoとTypeScriptでWeb開発を学んでいくことになるのですが、「さらに先の実用的なC++を学びたい!」と思った方にはぜひ実用C++ハンズオンを受けて欲しいと思います。

C++があれば、何でもできる!

では。


  1. Siv3DとかDXライブラリはかなり上手くやっていると思います。あれらは「単一の大きなフレームワークに乗ることでライブラリを組み合わせる方法を学ばずにアプリを作ることを可能にする」という手法ですが、本講習会では特定のライブラリやコンパイラへ縛られないことに重点を置きました。 ↩︎

  2. これは本当に勘違いしている人が多いのですが、本物のC++プログラマーはRAIIの思想に基づきスマートポインタなどを適切に使うため、普通のアプリケーションを作っている限り滅多なことではnewもdeleteも自分で書きません。主に使うのはstd::make_sharedとかそういうのです。そもそもクラス型もスタックメモリに置けるため普通の変数で十分なことが多いです。 ↩︎

  3. https://timsong-cpp.github.io/cppwp/n4861/basic.link#4 ↩︎

  4. https://timsong-cpp.github.io/cppwp/n4861/basic.def.odr#13 ↩︎

kegra icon
この記事を書いた人
kegra

レトロゲームとかが好き

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2024年4月17日
traPのDiscordラジオ体操部について
kegra icon kegra
2024年4月10日
2020春ハッカソン 「Exit from the Endless Echo」
Yataka_ML icon Yataka_ML
2023年12月25日
組織の柔軟性を活用する
kegra icon kegra
2023年12月14日
setIntervalの第2引数に気を付けろというだけの話
kegra icon kegra
2023年4月27日
Vulkanのデバイスドライバを自作してみた
kegra icon kegra
2022年12月26日
初代ぷよぷよという魔境について
kegra icon kegra
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記