2016-08-12 2 views
1

Мне было интересно, как передать typedef в функцию. Например:C++, проходящий typedef

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

Как бы сдать доску на функцию? Также внутри параметра функции я могу использовать decltype()?

ответ

3

Вы бы сделать это:

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

, а затем:

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

или все, что нужно для этого.

И да, вы можете использовать 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

Хмм так что ваша декларация будет эквивалентно созданию поле [3] [3], теперь как бы я сделать то же самое для массива размером 3x3, который указывает на указанные ячейки. –

+0

Как только у вас есть тип синоним 'box', вы можете в значительной степени относиться к нему как к любому другому типу. Таким образом, указателем на сборку ящиков 3x3 будет 'std :: array , 3>'. – Shoe

+0

Спасибо, я попробую, и вернусь, если у меня возникнут какие-то затяжные вопросы. –

1

Если вы нужно передать typedef в функцию, затем попробуйте объявить вашу структуру вне функции. Это придаст ему глобальный масштаб и, следовательно, сделает его доступным для функции.

т.е. это:

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 
{ 
    //........ 
} 

бы превратиться в это:

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], а затем внутри функции параметр Я бы написал поле * board [3] [3] –