Hatena::ブログ(Diary)

C++でゲームプログラミング

2011-02-02

[]指示付きの初期化子 (Designated Initializer)

とは、なんぞやというと、C99で追加された『構造体などの初期化を手助けする機能』らしい。

使い方はこんな感じ。

#include <assert.h>

typedef struct {
  float x, y;
} vec;

int
main(){
  vec v = {.y = 2.0f, .x = 1.0f};
  assert(v.x == 1.0f);
  assert(v.y == 2.0f);
  return 0;
}

変数を定義するときにメンバを指定して、構造体の初期化を行うことが出来ます。


さて、この『指示付きの初期化子』ですが、C99に追加された機能なので、C++では使うことは出来ません。

(そもそもC++のあとにC99が策定されているので)

C++でこの機能が使いたい場合は、ガシガシ自前で書いていくしかないみたいです。

C99で書いたソースをC++に移植する場合は、コードを書き換えないと駄目なので注意が必要みたいですねー。


[参照]

http://seclan.dll.jp/c99d/c99d07.htm#dt19991025

http://www.rhinocerus.net/forum/language-c/620248-c-vs-c-non-trivial-designated-initializers-not-supported.html

http://d.hatena.ne.jp/fd0/20100213/p1

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/osyo-manga/20110202/1296648282