我想知道如何将typedef传递给函数。例如:
typedef int box[3][3];
box empty, *board[3][3];
如何将电路板传递给某个功能?在函数参数内部,我可以使用decltype()?
答案 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);
}
答案 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
{
//........
}