2012-01-05 11 views
6

Considere métodoPasando línea doble matriz como argumento de un método

functionA (double[] arg) 

Quiero pasar una doble línea matriz, como

functionA({1.9,2.8}) 

y no crear una matriz primero y luego pasarlo, como

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

¿Esto es posible con C++? Suena simple, pero no pude encontrar una pista de todos modos sobre mi pregunta que me hizo sospechar :).

+0

en C++ ** method ** es una función de miembro virtual que existe a través de la jerarquía – DaddyM

Respuesta

8

Usted puede hacer esto con std::initializer_list<>

#include<vector> 

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

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

que compila y funciona para mí bajo g ++ con -std=c++0x especificado.

5

Esto funciona con C++ 0x

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

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

A pesar de lo que necesita para asegurarse de que la memoria asignada por la nueva se borra en el funciónA(), so pena de que se habrá una pérdida de memoria!

3

Puede hacerlo en C++ 11 utilizando std::initializer_list.

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

No puede hacerlo en C++ 03 (o implicará suficiente repetitivo no será factible).

Cuestiones relacionadas