我正在寻找一些帮助下一种情况:
我有一些类和一些方法在里面,语法是这样的:
class SomeClass {
public:
void doSomething(int *a);
};
我想这样调用这个方法
SomeClass::doSomething({ 0, 1, 2, 3, 4 });
它可以在任何语言中实现吗?任何(C++,C,obj-c,obj-c++)实现都是受欢迎的!我知道这个初始化块是数组体,就像
int *a = { 0, 1, 2, 3, 4 };
SomeClass::doSomething(a);
但是我认为,如果在函数调用之前没有临时变量(因为我们不需要知道类客户端中的参数类型),那么接口看起来会很棒。
4条答案
按热度按时间tv6aics11#
在C99中,这是可行的:
..类似的事情可以用结构体来做。
kknvjkwl2#
这是关于C++11初始化器列表的(章节18.9)。
只有编译器可以创建初始化器列表,但您可以将其视为具有
begin()
、end()
、size()
和随机访问迭代器的标准STL样式容器。std::vector
(我希望还有其他一些容器)现在可以用初始化器列表构造,所以相当于
除了它可能执行更少的分配。注意
const char*
已经自动变成std::string
。kxe2p93d3#
如果
initializer_list
不可用,并且数组大部分都很小,则还有另一个选择,即为std::vector重载<<
运算符,如下所示:有了它,你可以这样做:
单行初始化和不必指定向量大小的便利性是要付出代价的。为添加的每个元素创建先前向量的副本,使运行时间至少是向量大小的二次方--这就是为什么这最适合于短向量和性能无关紧要的情况。正如spraff的回答中所指出的,对于C++11有一个更好的解决方案。
628mspwn4#
可以将临时数组初始化为函数参数,如下所示
考虑上述函数,可以像这样将内联数组初始化作为函数参数: