ゆき社長

シーゲンガーのお勉強 ゲームプログラマ、ゲーマー、色々!

配列の参照を返す関数

まー 基礎的な事なんだけど C言語の文法って不思議なんです。

主に関数ポインタ関連ですけど

関数プロトタイプは Cでは

int add( int x, int y );

ですよね。でもGoでは

func add(x int, y int) int

と、一般的に知られてる C言語の文法から大きくかえたのは

C言語の文法だと 色々と問題があるからなんですね

その辺は

http://meryngii.hatenablog.com/entry/20080923/1222154366

このあたりみると いいです。

複雑です・・・

で、配列の参照の前に intを返す関数は

int hoge();

で簡単ですね。

参照は

int & hoge();

int配列のポインタは

int *hoge();

何も問題ないですね。

では、int配列の参照を返す場合はどうですか?

int n[10];

int[10]& func(){

return n;

}

こんな風に書きたい? 残念ですが コンパイルエラーです

C言語の文法では下記が正しい

int n[10];

int (&func())[10]{

return n;

}

キモい! けど 文法ではこれが正しい。

そこで boost::add_reference を使うと それなりに見やすくなる

#include

int n[10];

boost::add_reference::type func(){

return n;

}

int[10] の参照型をboost::add_reference::type  と書ける

コード量は増えるけど、こっちの方がぱっと見で わかりやすいと思うので

オススメ