2016-08-12 12 views
1

私はtypedefを関数に渡す方法を知りました。例えば:C++がtypedefを渡す

typedef int box[3][3]; 
    box empty, *board[3][3]; 

ボードを関数に渡すにはどうすればよいですか?また、関数のパラメータの中でdecltype()を使うことができますか?

void fn(box const& x) 
void fn(box& x) 
void fn(box&& x) 

するか、あなたはそれのために何が必要になります。その後、

using box = std::array<std::array<int, 3>, 3>; 

とを:

答えて

3

あなたはこれを行うだろう。

はい、関数内でdecltypeを使用しても問題ありません。

実用的な例として、あなたはボックスの内容を表示する関数を定義できます。

using box = std::array<std::array<int, 3>, 3>; 

void fn(box const& arr) { 
    for (auto const& x : arr) { 
     for (auto i : x) { 
      std::cout << i << ' '; 
     } 
     std::cout << '\n'; 
    } 
} 

をして、ただでそれを呼び出す:あなた場合

int main() { 
    box x {{ 
     {1, 2, 3}, 
     {4, 5, 6}, 
     {7, 8, 9} 
    }}; 
    fn(x); 
} 

Live demo

+0

void func(test, test); // parameter name warning occurs here int main() { typedef struct{ int a, b, c; } test; test here, there; //......... func(here, there); return 0; } void func(test here, test there) // parse error occurs here { //........ } 

はこのに変わるだろう上記のボックスを指すサイズ3x3の配列の場合 –

+0

型synonim 'box'があれば、他の型と同じように扱うことができます。したがって、ボックスの3x3コレクションへのポインタは 'std :: array 、3>'となります。 – Shoe

+0

ありがとうございました、私はそれを試してみるつもりです。私は何か遅れて質問があれば返します –

1

は、 typedefを関数に渡し、関数の外で構造体を宣言してみる必要があります。これにより、グローバルなスコープが与えられ、結果的に機能に利用できるようになります。

この例:[3]、今どのように私は同じことをするだろう[3]うーんので、あなたの宣言は、ボックスを作成することと同じになります

typedef struct{ 
     int a, b, c; 
    } test; 

void func(test, test); // parameter name warning occurs here 

int main() 
{ 

    test here, there; 

    //......... 

    func(here, there); 

    return 0; 
} 

void func(test here, test there) // parse error occurs here 
{ 
    //........ 
} 
+0

私の理解が間違っている場合は私の構造体の内部に私はボックス[3] [3]私はbox * board [3] [3]と書くでしょう。 –