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

نحوه overload کردن یک تابع در ++C

0 امتیاز

سلام به همگی ، در این لینک (http://www.7khatcode.com/6704/%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D8%AA%D8%A7%D8%A8%D8%B9-%D8%A8%D8%A7-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D9%86%D8%A7%D9%85%D8%AD%D8%AF%D9%88%D8%AF-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-vector-%DB%8C%D8%A7-%D9%87%D8%B1-%DA%86%DB%8C%D8%B2-%D8%AF%DB%8C%DA%AF%D8%B1%DB%8C-%D8%AF%D8%B1-c)

گفته بودم که دارم رو یه تابع مثل printf کار میکنم که از دستور printf برای چاپ متغیر string استفاده کنم. کد این تابع به صورت زیر است :

 

 void printf(string Massage , ...){
        va_list MassageList;
        vector<char> StringChars;
        va_start(MassageList , Massage);
        U long Lenght;
        for(string massage = Massage ; massage != NULL ; massage = va_arg(MassageList , string)){
            Lenght = massage.lenght();
            for(U long i = 1 ; i <= Lenght ; i++)
            {
                StringChars.push_back(massage.substr(i , 1));
               std::printf("%s" , StringChars[i]);
            }
        }
    }

اما من شنیدم باید تابع رو overload کنم.

میشه یه توضیح بدین ؟؟؟

سوال شده بهمن 12, 1393  بوسیله ی Arshia::Aghaei (امتیاز 108)   8 14 22
برای printf چون دارید از var_list برای پارامتر نامحدود استفاده می کنید نیازی به این کار نیست .
در مورد overload هم داخل اون لینکی که گذاشتید کد اول operator<<  که نوشته شده overload شده .
ضمنا این حلقه for که نوشتید هم اشتباه هست string چون پوینتر نیست و کلاس هستش نمیشه با NULL مقایسش کرد . بعد این که وقتی که از va_arg استفاده می کنید باید حتما ورودی های تابع POD باشه (یعنی struct یا کلاسی که سازنده و عضو virtual نداره ) که string این طور نیست پس va_arg(MassageList , string) اشتباه هستش.
پس باید از چی استفاده کنم ؟؟
variadic_templates
من از C++ 98 استفاده میکنم. نه ۱۱.

پاسخ شما

اسم شما برای نمایش (دلخواه):
از ایمیل شما فقط برای ارسال اطلاعات بالا استفاده میشود.
تایید نامه ضد اسپم:

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
...