art*_*vin 20 c++ parameters initialization function
我在下一个情况下寻找一些帮助:
我有一些类和一些方法,语法是这样的:
class SomeClass {
public:
void doSomething(int *a);
};
Run Code Online (Sandbox Code Playgroud)
所以我想把这个方法称为
SomeClass::doSomething({ 0, 1, 2, 3, 4 });
Run Code Online (Sandbox Code Playgroud)
有可能用任何语言吗?任何(C++,C,obj-c,obj-c ++)实现都是受欢迎的!我知道这个初始化块是一个数组体,就像
int *a = { 0, 1, 2, 3, 4 };
SomeClass::doSomething(a);
Run Code Online (Sandbox Code Playgroud)
但是,我认为,如果在函数调用之前没有临时变量,接口看起来会很棒(因为我们不需要知道class-client中的参数类型).那么,有没有机会做到这一点?
Dmi*_*tri 23
在C99中,这适用于:
functionThatTakesIntPtrOrArray( (int []){ 1, 2, 3, 4 } );
Run Code Online (Sandbox Code Playgroud)
..结构可以做类似的事情.
void foo (std :: initializer_list <int> inputs) {
for (auto i : inputs) {
// ...
}
}
foo ({10, 20, 30});
Run Code Online (Sandbox Code Playgroud)
只有编译器可以创建一个初始化列表,但你可以把它像一个标准的STL风格的容器begin(),end(),size(),和随机访问迭代器.
std::vector (我希望其他一些容器)现在可以用初始化列表构建,所以
std :: vector <std :: string> foo {"a", "b"};
Run Code Online (Sandbox Code Playgroud)
相当于
std :: vector <std :: string> foo;
foo .push_back ("a");
foo .push_back ("b");
Run Code Online (Sandbox Code Playgroud)
除了它可以执行更少的分配.请注意,const char*已经std::string自动转换为.