【问题标题】:Send array of 2 integers as argument发送 2 个整数的数组作为参数
【发布时间】:2013-09-14 03:25:00
【问题描述】:

我正在尝试使这段 C++ 代码更抽象、更易于查看和理解,并且占用更少的空间。它是一个函数,它接受一个字符串和两个整数作为大小和位置。

HWND CreateButon(string Title, const int[2] Size, const int[2] Position) {
    // Create the control, assign title, size and position
    // Return HWND
}

HWND MyButton = CreateButton("Button1", [100, 20], [10, 10]);

我知道最后一个是错误的。我只是这样写的,所以你可以明白我的意思。我想直接将大小和位置值作为参数发送。我可以使用structs,但必须先声明它们。其他类型的变量也是如此。我只想将它们作为两个整数组发送到参数中,我想知道是否有解决方法。最重要的是,它只是为了让它紧凑而简单。

【问题讨论】:

  • 如果 C++11 是一个选项,元组和统一大括号初始化是一种解决方案。

标签: c++ arrays integer arguments


【解决方案1】:

你可以传递一对而不是数组:

HWND CreateButton(string Title, std::pair<int,int> Size, std::pair<int,int> Position);

CreateButton("Button1", {100, 20}, {10,10});                            // C++11
CreateButton("Button1", std::make_pair(100,20), std::make_pair(10,10)); // C++03

或者,仅在 C++11 中,您可以传递 std::array&lt;int,2&gt;。这需要稍微陌生的聚合初始化 {{100, 20}},但这意味着您不会失去使用 [] 对其进行索引的能力。

就个人而言,我可能更喜欢定义您描述的结构;这将提供更多的类型安全性和自我文档,我倾向于比紧凑性更重视。事实上,我什至可以给他们一个explicit 构造函数(而不是允许列表初始化),所以你必须使用“命名参数”:

CreateButton("Button1", Size(100,20), Position(10,10));

【讨论】:

  • 这比我的解决方案好
  • 谢谢。这是一个很好的答案
  • 而且,由于结构是在别处定义的,因此保持了紧凑性。如果可以使用C++11,这是一个完美的解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 2014-06-16
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
相关资源
最近更新 更多