2017-01-28 11 views
-1

は、私はこのような機能を持っている:C++の関数で配列要素をパラメータとして渡すには?

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

    return 0; 
} 

方法:bar機能を使用して

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

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

は、私はこのようなfoo関数にパラメータとして配列要素を渡したいですそれはできますか?ありがとう!

+3

[省略記号(、なぜそれらを回避する)](http://www.learncpp.com/cpp-tutorial/714-ellipsis:以下は、上記のコードと同様に動作すること

注-and-why-avoid-them /) –

+0

*配列*または 'std :: initializer_list'を渡しますか? – Galik

答えて

2

コンパイル時に配列の値がわかっている場合は、std::index_sequencesとそれを使用してC++で行うことができます。最小限、実施例として
:私はarrayを想定

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

アレイなくstd::initializer_listあります。質問はこの点で少し混乱していました。

void foo(std::size_t count, ...) { 
    va_list args; 
    va_start(args, count); 
    // do something... 
    va_end(args); 
} 
関連する問題