配列の参照を返す関数
まー 基礎的な事なんだけど 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
コード量は増えるけど、こっちの方がぱっと見で わかりやすいと思うので
オススメ