Мне было интересно, как передать typedef в функцию. Например:C++, проходящий typedef
typedef int box[3][3];
box empty, *board[3][3];
Как бы сдать доску на функцию? Также внутри параметра функции я могу использовать decltype()?
Мне было интересно, как передать typedef в функцию. Например:C++, проходящий typedef
typedef int box[3][3];
box empty, *board[3][3];
Как бы сдать доску на функцию? Также внутри параметра функции я могу использовать decltype()?
Вы бы сделать это:
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);
}
Если вы нужно передать 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
{
//........
}
Исправьте меня, если мое понимание неверно, поэтому внутри моей структуры у меня будет поле [3] [3], а затем внутри функции параметр Я бы написал поле * board [3] [3] –
Хмм так что ваша декларация будет эквивалентно созданию поле [3] [3], теперь как бы я сделать то же самое для массива размером 3x3, который указывает на указанные ячейки. –
Как только у вас есть тип синоним 'box', вы можете в значительной степени относиться к нему как к любому другому типу. Таким образом, указателем на сборку ящиков 3x3 будет 'std :: array, 3>'. –
Shoe
Спасибо, я попробую, и вернусь, если у меня возникнут какие-то затяжные вопросы. –