テンプレート関数へのポインターを使用しています。関数には配列参照引数があります。次に例を示します。
template< size_t N >
double MyFunction( double (&x)[N] );
以前の関数型を別の関数の引数のように使用します
template< size_t N >
bouble BigFunction( double (* PtrFunc)( double (&)[N] ), ... ) {
double x[3];
...
// fill x
// call PtrFunc
double y = (* PtrFunc)( x ); // error: ...
...
}
メインプログラムで呼び出しますdouble z = BigFunction( &MyFunction, ... )
が、GCC 4.7.2 でコンパイルしようとすると、N = 3 の配列の特定のケースで次のエラーが発生します (ケースは重要ではなく、エラーの [3] のみを説明します)
エラー:型 'double [(((sizetype)(((ssizetype)dim[1]) + -1))+ 1)]' の式からの型 'double (&)[3]' の参照の初期化が無効です。 /p>
配列参照を使用して問題を解決するにはどうすればよいですか?
注.-ポインター引数を typedef または std::function< double( double (&)[N] ) > の構造体に置き換えた場合、問題は同じです。