[英]how pass an array as parameter, and the array is defined in the parameters in c++
I am converting ac# written program into c++ code. 我正在将ac#编写的程序转换为c ++代码。 I have ac# function declaration like:
我有一个ac#函数声明,例如:
// c# function declaration
int DerivationFunc(int id, params BasicFeature[] args);
So I convert it to c++ 所以我将其转换为c ++
// c++ function declaration
int DerivationFunc(int id, BasicFeature* args, int argsNum); // argsNum denotes the size of the array
Now I have problems when calling the functions. 现在调用函数时出现问题。 In c#, I can call the function with the array definition in the parameters:
在c#中,我可以使用参数中的数组定义来调用该函数:
// c# function calling
DerivationFunc(16, new BasicFeature[] {query, keyword});
So how can I do this in C++? 那么如何在C ++中做到这一点呢?
// c++ function calling
DerivationFunc(16, /*something like BasicFeature[] {query, keyword} but with the right syntax*/, 2);
You could rewrite the function to take std::initializer_list : 您可以重写该函数以采用std :: initializer_list :
#include <initializer_list>
#include <iostream>
struct BasicFeature {
} query, keyword;
int DerivationFunc(int id, std::initializer_list<BasicFeature> args)
{
std::cout << args.size() << " element(s) were passed.\n";
return id;
}
int main()
{
DerivationFunc(42, { query, keyword });
}
If you are not allowed to use std::initializer_list
, I could suggest a little ugly hack: 如果您不被允许使用
std::initializer_list
,我可能会建议您使用一些难看的技巧:
#include <vector>
#include <iostream>
enum BasicFeature {
query,
keyword
};
template<typename T>
class init_list
{
public:
init_list &operator<<( typename T::value_type value )
{
m_list.push_back(value);
}
operator const T() const { return m_list; }
private:
T m_list;
};
void DeriviationFunc( int id, const std::vector<BasicFeature> &args )
{
std::cout << id << std::endl;
std::cout << args.size() << std::endl;
std::cout << args[0] << std::endl;
}
int main()
{
DeriviationFunc(16, init_list<std::vector<BasicFeature> >() << query << keyword);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.