2017-01-28 3 views
-1

Ich habe eine Funktion wie diese bekommen:Wie übergeben Array-Elemente als Parameter in Funktion in C++?

void bar(int n, int array[]) 
{ 
    // I want to pass array elements as parameter like this: 
    foo(n, array[0], array[1], array[2], array[3], ..... array[n]); 
} 

Mit bar Funktion:

int main() 
{ 
    bar(7, std::initializer_list<int>({ 0, 1, 2, 3, 4, 5, 6 })); 

    return 0; 
} 

Wie

void foo(int count, ...) 
{ 
    va_list args; 
    va_start(args, count); 
    // Do Somethings... 
    va_end(args); 
} 

I Array-Elemente als Parameter in foo Funktion wie diese passieren wollen Kann ich es schaffen? Vielen Dank!

+3

[Auslassungspunkte (und warum sie vermeiden)] (http://www.learncpp.com/cpp-tutorial/714-ellipsis -und-warum-zu-vermeiden-sie /) –

+0

Möchten Sie ein * Array * oder eine 'std :: initializer_list' übergeben? – Galik

Antwort

2

Wenn Sie wissen, was die Array-Werte zum Zeitpunkt der Kompilierung sind, können Sie std::index_sequences und ein wenig Template-Maschinerie verwenden, um das in C++ 14 zu tun.
Als minimal, Arbeitsbeispiel:

#include<functional> 
#include<iostream> 

template<typename... Args> 
void foo(std::size_t count, Args... args) { 
    int _[] = { 0, (std::cout << args << std::endl, 0)... }; 
    (void)_; 
} 

template<std::size_t N, std::size_t... I, typename T> 
void bar(std::index_sequence<I...>, T(&array)[N]) { 
    foo(N, array[I]...); 
} 

template<std::size_t N, typename T> 
void bar(T(&array)[N]) { 
    bar(std::make_index_sequence<N>{}, array); 
} 

int main() { 
    int array[] = { 0, 1, 2, 3, 4, 5, 6 }; 
    bar(array); 
} 

I array angenommen, ist ein Array, und nicht ein std::initializer_list. Die Frage war in diesem Punkt etwas verwirrend.

Beachten Sie, dass die folgenden Werke als auch mit den obigen Code:

void foo(std::size_t count, ...) { 
    va_list args; 
    va_start(args, count); 
    // do something... 
    va_end(args); 
} 
Verwandte Themen