並ゲームプログラマの書き捨て場

ゲームプログラマやってる私の日記、雑記、備忘録、公開場所

weak attributeが欲しい

弱い・・・弱すぎるぞ!!djannです。

 

単なる願望なのだが、C++の標準にweak attributeが欲しい。特別どうしてもこれが無ければどうしようもない!首を吊るしかない!というような強い要望という訳ではなく、あったら便利かもしれない程度のものだが。

私が初めて目にしたのは、とあるSDKを利用する際に、使用可能なヒープのサイズをweak attributeで修飾されたグローバル変数を用いていた場面だ。そこから調べ、特定のコンパイラの拡張だと知った。リファレンスを読んだりした訳ではないが、大体以下のような機能を持っている。

 

・ソースファイルAで変数(関数も?)にweak指定を行う(int a __attribute__( (weak) );のような形だったか?)

・ソースファイルBで同様の型、識別子で変数を定義していなければ、その変数のアドレスはnullptrとなる。

 

特定のハードウェア向けのライブラリを実装する際に、出来るだけ手続きを減らしつつリソースの容量、挙動などを変更する場合等に用いられれば便利だろう。

 

さて、肝心の望む構文だが、C++11より加わったattributeの仲間として加えればいいだろう。[ [attribute-name] ]という構文となる。ここにweakと書く。

 

int foo [ [weak] ];        // weak変数foo.
int bar, baz [ [weak] ];   // weak変数はbazのみ.
void func() [ [weak] ] {}  // weak関数func.

 

個人的には変数一つ一つに付ける方が好みである。名前はまだないry