2011-06-15 19 views
23

Quiero utilizar la característica de plantilla variadic para mi aplicación, pero no quiero que los objetos pasen por valor (ya que los objetos son bastante complejos en mi caso). Quiero pasarlos por referencia (no como punteros).C++ 0x plantilla variable pase por referencia

void func() 
{ 
} 

template<typename Function1, typename... FurtherFunctions> 
void func(Function1 f1, FurtherFunctions... further_functions) 
{ 
    // doing some processing here... 
} 

¿Cómo puedo pasar los argumentos por referencia y asegurarme de que no se copian?

Respuesta

28

Sólo decir:

template <typename ...Args> 
int myfunction(Args & ... args) 
{ 
    /* ... */ 
} 

Lo mismo para const Args & ... args, etc. Args && ... args

+0

¿Cuál es la diferencia entre Args y Args y &&? – usman

+2

'Args &&' es una referencia de valor real, que nunca necesitará escribir en su propio código. Solo lo menciono porque existe y de vez en cuando puedes [verlo] (http://stackoverflow.com/questions/6114067/how-to-emulate-c-array-initialization-int-arr-e1-e2- e3-behavior/6272491 # 6272491). –

+3

En realidad '&&' tiene sentido aquí, ya que es probable que desee usar 'std :: forward'. –

Cuestiones relacionadas