تعداد آرگومان های نامحدود در C++ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تعداد آرگومان های نامحدود در C++

+2 امتیاز
سلام دوستان

چطور می تونیم در C++11 و C++ آرگومان های نامحدود در تعریف تابع داشته باشیم.
سوال شده آذر 11, 1392  بوسیله ی pedram (امتیاز 52)   4 9 13
دوباره تگ گذاری شد فروردین 27, 1393 بوسیله ی BlueBlade
اگه بیشتر توضیح بدید که دقیقا برای چ کدی نیاز دارین بهتر میشه

2 پاسخ

+4 امتیاز
 
بهترین پاسخ

در C++11
میتونی از Initialize_list استفاده کنی به این شکل :
 

#include <iostream>
#include <initializer_list>
#include <string>

void print(std::initializer_list<std::string> mList)
{
    for(auto i:mList)
        std::cout<<i<<"\n";
}
int main()
{
    print({"name","last name","2222"});
}

 

یا از variadic templates ها استفاده کن:

#include <iostream>
#include <string>

void print(){}//end

template<class T,class... Types>
void print(const T& val,const Types& ... args)
{
    std::cout<<val<<std::endl;
    print(args ... );
}
int main()
{
    print("name",123,'s',222,"last name","2222");
}

یا با استفاده stdargs

 

va_list list;

va_start(list,arg1)

var_arg(list,type_of_arg1) //to in khat voroodi haye func khoondee mishan 

va_end(list)

 

#include <iostream>
#include <stdarg.h>
#include <string>

void print(std::string arg1, ...)
{
  va_list LIST;//sakhtan  sakhtar shamel etelaat voroodi haye func
  va_start(LIST, arg1);//moshakhas kardan list va mahale shoroo

  for (std::string str = arg1; str != "end" ; str = va_arg(LIST, char*))//az va_arg baraye raftan be voroodi badi func estefade mishe
    std::cout<<str<<"\n";

  va_end(LIST);//bastan list  
}
int main()
{
    print("name","last name","end");
}

 

پاسخ داده شده دی 25, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده فروردین 6, 1393 بوسیله ی BlueBlade
+2 امتیاز

نیازی نیست نامحدود کنن. راه حل هست .

درضمن زیاد شدن پارامتر ها از نظر پرفرمنس خوب نیست.

اگه مبحث Calling Conbention ها روخوب بخونی می فهمی . (چیزایی مثل کدوم ارگومان ها از ثبات استفاده می کنن و..)

راه خوب و راحتش اینه.

struct UserParam
{
	char* firstName;
	char* lastName;
	char* country;
	char* city;
	int   age;
	int   id;
	//...
};

void AddUser(const UserParam& p)
{
	//...
}


void main()
{
	UserParam param = { "name", "last name", "iran", "tehran", 19, 123302};
	AddUser(param);
}

 

پاسخ داده شده آذر 21, 1392 بوسیله ی asdfgh qwerty (امتیاز 100)   2
...