簡體   English   中英

如何將數組作為參數傳遞,並且數組在c ++中的參數中定義

[英]how pass an array as parameter, and the array is defined in the parameters in c++

我正在將ac#編寫的程序轉換為c ++代碼。 我有一個ac#函數聲明,例如:

// c# function declaration
int DerivationFunc(int id, params BasicFeature[] args); 

所以我將其轉換為c ++

// c++ function declaration
int DerivationFunc(int id, BasicFeature* args, int argsNum); // argsNum denotes the size of the array

現在調用函數時出現問題。 在c#中,我可以使用參數中的數組定義來調用該函數:

// c# function calling
DerivationFunc(16, new BasicFeature[] {query, keyword});

那么如何在C ++中做到這一點呢?

// c++ function calling
DerivationFunc(16, /*something like BasicFeature[] {query, keyword} but with the right syntax*/, 2);

您可以重寫該函數以采用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 });
}

如果您不被允許使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM