2012-01-05 18 views
6

पर विचार करें विधिविधि तर्क के रूप में इनलाइन डबल सरणी पासिंग

functionA (double[] arg) 

मैं एक डबल सरणी इनलाइन पास करना चाहते हैं, जैसे

functionA({1.9,2.8}) 

और नहीं पहले एक सरणी बनाने और उसके बाद इसे पारित,

की तरह
double var[] = {1.0,2.0}; 
functionA(var); 

क्या यह सी ++ के साथ संभव है? सरल लगता है, लेकिन मुझे अपने प्रश्न से संबंधित एक संकेत नहीं मिला जो मुझे संदिग्ध बना देता है :)।

+0

सी ++ ** विधि ** वर्चुअल सदस्य-फ़ंक्शन है जो पदानुक्रम के माध्यम से मौजूद है – DaddyM

उत्तर

8

आप std::initializer_list<>

#include<vector> 

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

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

कौन सा संकलित करता है तथा -std=c++0x निर्दिष्ट साथ ++ जी के तहत मेरे लिए काम करता के साथ ऐसा कर सकते हैं।

5

यह C++ 0x

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

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

यद्यपि आप यह सुनिश्चित करें कि स्मृति नया द्वारा आवंटित कार्यात्मक() में हटा दिया जाता है बनाने की जरूरत है, ऐसा न करने पर आप वहाँ एक स्मृति रिसाव हो जाएगा के साथ काम करता है!

3

आप इसे std::initializer_list का उपयोग कर C++ 11 में कर सकते हैं।

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

आप इसे में कर सकते हैं नहीं सी ++ 03 (या यह काफी बॉयलरप्लेट यह संभव नहीं होगा शामिल होगी)।

संबंधित मुद्दे