2017-01-28 1 views
-1

J'ai une fonction comme ceci:Comment faire passer des éléments de tableau en tant que paramètre dans une fonction en C++?

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

Je veux passer les éléments du tableau en tant que paramètre dans la fonction foo comme ceci:

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]); 
} 

utilisant bar fonction:

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

    return 0; 
} 

Comment puis-je le faire? Merci!

+3

[Ellipsis (et pourquoi les éviter)] (http://www.learncpp.com/cpp-tutorial/714-ellipsis -et-pourquoi-les-éviter-les /) –

+0

Voulez-vous passer un * tableau * ou un 'std :: initializer_list'? – Galik

Répondre

2

Si vous savez quelles sont les valeurs de tableau au moment de la compilation, vous pouvez utiliser std::index_sequences et un peu de machines de modèle pour le faire en C++ 14.
En tant que minime, exemple de travail:

#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); 
} 

Je supposais array est un tableau et non un std::initializer_list. La question était un peu confuse sur ce point.

Notez que les œuvres suivantes ainsi avec le code ci-dessus:

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