פורסם 2006 באפריל 2719 שנים איך אוכל להגדיר את struct מסוג templateתנו בבקשה דוגמה איך זה אמור להיראות בהגדרה וב-mainמה לא טוב בחלק הזה של הקודtemplate <class T>struct s{ T data;};int main(){ s <WHAT IS THIS> myS; return 0;}
פורסם 2006 באפריל 2719 שנים איפה שרשמת "WHAT IS THIS", אתה צריך לכתוב את ה-type שאיתו אתה רוצה לממש את ה-struct.
פורסם 2006 באפריל 2719 שנים מחבר ואם איני יודע מראש מאזה סוג יהיה ה-DATA?אם אני אדע את זה רק אחרי ריצת תוכנית?לדוגמה המשתמש אמןר לבחור מאיזה סוג DATA הוא יכניס?
פורסם 2006 באפריל 2719 שנים אתה לא יכול לעשות דבר כזה בעזרת templates. לא בצורה נורמלית, בכל אופן...כשאתה מגדיר ב-main את myS מסוג s, הקומפיילר צריך לדעת כמה מקום להקצות לאיבר הזה בזיכרון. בשביל לדעת את זה, הוא חייב לדעת כמה מקום להקצות לכל member של ה-struct הזה, ולכן, הוא צריך לדעת, כבר בזמן קומפילציה, את ה-type של כל member.בקיצור, הקומפיילר לא מקמפל קוד מטומפלט (עם templates) עד שמקום כלשהו אחר בקוד יצר instance של ה-struct/class המטומפלטים, וציין בעזרת איזה type לממש את ה-struct/class.
פורסם 2006 באפריל 2719 שנים אז אי אפשר לעשות את זה.הקומפיילר חייב לדעת את הערך שאתה נותן לטמפלייט בזמן הקומפילציה.בכל מקרה, אם אתה רוצה לאפשר למשתמש לבחור איזה טיפוס לתת לטמפלייט, אתה חייב להגביל את עצמך מראש לכמה טיפוסים, ואז לתת למשתמש לבחור ביניהם. ואז תוכל לעשות אחד משלושה דברים:1. מראש ליצור את כל ה-instace-ים האפשריים, כלומר s<int> x; s<double> y וכן הלאה, וכל פעם לבחור את ה-instance הרצוי לפי רצון המשתמש.2. לעשות s<void*> x, ואז לעשות את ההמרה בכל פעם שאתה רוצה לקרוא או לכתוב לטיפוס הזה. זו השיטה ה-C-ית להתמודד עם התמודדות עם טיפוסים בזמן ריצה.3. להשתמש בירושה. הבעיה היא שתהיה חייב ליצור טיפוסים חדשים משלך שכולם ירשו מאותו אבא, ולא תוכל להשתמש בטיפוסים קיימים (כמו int,double).
פורסם 2006 באפריל 2819 שנים אם תפרט קצת יותר מה אתה רוצה לעשות, כנראה יהיה אפשר לעזור לך יותר טוב.אם אתה רוצה להתייחס לאובייקטים שהגדרת בצורה דומה (למשל להחזיר רשימה של מצביעים אליהם) אתה יכול לעשות class אב רגיל (ואפילו ריק), שממנו יורש ה- class הטמפלייטי.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.