Передача встроенного двойного массива в качестве аргумента метода - PullRequest
10 голосов
/ 05 января 2012

Рассмотрим метод

functionA (double[] arg)

Я хочу передать встроенный двойной массив, например

functionA({1.9,2.8})

, и не создавать сначала массив, а затем передавать его, например

double var[] = {1.0,2.0};
functionA(var);

Возможно ли это с C ++?Звучит просто, но я так и не смог найти подсказки по поводу моего вопроса, который вызвал у меня подозрения :).

Ответы [ 3 ]

11 голосов
/ 05 января 2012

Вы можете сделать это с помощью std::initializer_list<>

#include<vector>

void foo(const std::initializer_list<double>& d)
{ }

int main()
{
    foo({1.0, 2.0});
    return 0;
}

, который компилируется и работает для меня под g ++ с указанием -std=c++0x.

5 голосов
/ 05 января 2012

Это работает с c ++ 0x

void functionA(double* arg){
   //functionA
}

int main(){
    functionA(new double[2]{1.0, 2.0});
    //other code
    return 0;
}

Хотя вам нужно убедиться, что память, выделенная новым, удалена в функции A (), в противном случае произойдет утечка памяти!

3 голосов
/ 05 января 2012

Вы можете сделать это в C ++ 11, используя std::initializer_list.

void fun(std::initializer_list<double>);
// ...
fun({ 1., 2. });

Вы не можете сделать это в C ++ 03 (или это потребует достаточного количества шаблонов, что будет невозможно).

...