C ++传递一个typedef

时间:2016-08-12 15:16:07

标签: c++

我想知道如何将typedef传递给函数。例如:

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

如何将电路板传递给某个功能?在函数参数内部,我可以使用decltype()?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
{
   //........
}