C++ リハビリ
このところ、Objective-C ガラミの記事を書いていたせいか、他の言語のこと忘れちょる。
C++ リハビリ
ネットに落ちている簡単なレクチャー読んでリハビリ。
こういう時に江添本とかはよくない。
『一週間で身につくC++ 言語の基本』シリーズ
こういうの、いいねー。
メモ
本当にメモ。
ostream 基本。
Metal 関係リソース物色中
あまり勉強したことがない Metal 関係のリソースを物色中。
公式サンプル
おお!と思ったのは公式のサンプル紹介記事にあったこのプロジェクト(群)。

C++ と書いてあるが、「どーせ、これ Objective-C++ でしょ?」と思っていたが、れっきとした C++ だった。
例えば、Xcode で GUI アプリを作成した際、自動で生成される main.m に相当する部分は
int main( int argc, char* argv[] )
{
NS::AutoreleasePool* pAutoreleasePool = NS::AutoreleasePool::alloc()->init();
MyAppDelegate del;
NS::Application* pSharedApplication = NS::Application::sharedApplication();
pSharedApplication->setDelegate( &del );
pSharedApplication->run();
pAutoreleasePool->release();
return 0;
}
となっている。
言われてみれば Objective-C++ と C++ との対応はこうですね、って感じ。
三角形ばかり書いていてもつまらん
そんな方はこちらなんかも。
ただし、これは Swift の iOS プロジェクトなので、MacOS に移植する際にはいくらか(↓)修正が必要。
cocoa アプリでの Metal Viewer の取り扱い
手動で追加する。

NSObect のサブクラスとして適当な名前のクラスを作成した後に、MTKViewDelegate を書き加える。
また、以下の二つのメソッドは MTKViewDelegate を継承するには必須のようなので、付け加える。

参考(追記)
『MacでObjective-cを使ってMetalを初期化』
のシリーズを使って勉強しよう・・・と思っていたのだが、これは Objective-C で Metal を扱う際にはイマイチのやり方のようだ。
もともとアップル公式のサンプルは Objective-C で書かれており、これを Swift に移植したものが、上記シリーズ(というかネットに落ちている情報全般)っぽい。
この記事にならって丹念にアップル公式のサンプル眺めていくしかないかな。
C++ の -> と .
オンラインコンパイラー便利ですね。
けっこう使うようになりました。
そういえば、Objective-C で -> や . の取り扱いってどうなんだっけ?と疑問に思ったんだが、まずは C++ で復習。
以下のような簡単なサンプルを書いてみる。
#include <iostream>
#include <string>
struct sample {
int number;
char chara;
};
int main()
{
struct sample s1;
struct sample* s2;
s2 = &s1;
s2->number = 123;
std::cout << "s1 number= " << s1.number << std::endl;
std::cout << "s2 number= " << s2->number << std::endl;
}
今回、使ったオンライン環境はこちら。
結果は以下のようになった。

世の教科書の教え通り
通常の構造体への変数として定義した s1 のメンバー変数にアクセスするときは . (ドット)
sample 構造体へのポインタ変数として定義した s2 のメンバー変数にアクセスするときは -> (アロー)
でうまくいく。
incomplete type in nested name specifier エラー
以下のようなコード(StackOverFlow より)は C++ ではエラーが出る。
class A;
int b= A::c; // error: incomplete type ‘A’ used in nested name specifier
class A {
static const int c=5;
};
当たり前と思われる人もいるかもしれないが、ライブラリを多数使っている場合、なかなか原因に気がつかない。
