פורסם 2008 בינואר 2517 שנים שלוםיש לי בעיה בהקצאת מחלקת TEMPLATE חדשהנתון לי מחלקהtemplate<int size> class aועכשיו יש לי פונקציה שמקבלת גודל a בתור פרמטרוצריכה להקצות מחלקה חדשהניסיתי ככה אבל זה לא עבדA<a> *test = new A<a>;תודה
פורסם 2008 בינואר 2517 שנים הפרמטר של template חייב להיות ידוע בזמן הקומפילציה. אתה לא יכול לקבוע אותו רק בזמן הריצה.אם תפרט מה בדיוק אתה מנסה לעשות, אולי נוכל להציע פתרון חלופי.
פורסם 2008 בינואר 2517 שנים מחבר אני אנסה לפרט קצתיש לי מחלקה בשם Aשהיא מסוג TEMPALTE שאמורה בעת היצירה לקבל פרמטר של גודל בתוך הסוגריים של TEMPLATEכלומר היא מוגדרת ככהtemplate<int size>class A{...};עכשיו יש לי מחלקה שניה בשם B שהיא לא TAMPLATE שמשתמשת במחלקה Aמחלקה B מקבלת בCONSTRACTOR פרמט של גודלוהבעייה שלי שאני צריך ליצור בתוך המחלקה B מחלקה A באותו הגודל (שמקבלים בCONSTRACOR)וזה יוצר לי בעייות כי A היא TAMPLATEככה זה נראהclass B{public: B(int size);...private:A<???> test;}מה אני אמור לכתוב במחלקה B במקום הסימני שאלה (שם אמור להיות גודל כלשהו שאני לא יודע אותו עד ליצירת המחלקה B) בבקשה תעזרו לי
פורסם 2008 בינואר 2517 שנים כמו שאמרתי, אי אפשר לעשות את זה, אתה צריך לדעת את הפרמטר בזמן קומפילציה. A חייבת להיות Template?
פורסם 2008 בינואר 2517 שנים מחבר כן A חייבת להיות TEMPLATEשאלה אחרת אז.איך אני עושה casting למחלקה שהיא TEMPLATEלדוגמא יש לי void* ptr;const int i = 100;ptr = new A<i>;איך אני עושה שptr יהיה מצביע למחלקה A בגודל 100ניסיתי ככה אבל זה לא עבדptr = (*A<i>)ptr;תודה
פורסם 2008 בינואר 2517 שנים אתה צריך להבין משהו - instance של template, למשל a<100> הוא class בפני עצמו. אין שום קשר בין a<100> לבין a<90>.אם יש לך class או פונקציה שמשתמשים ב- template, גם הם צריכים להיות מוגדרים כ- template (יש לך אפשרות לעקוף את זה אם ה- template שלך יורש מ- class שמגדיר ממשק משותף).בדוגמא שכתבת אתה לא יכול לעשות new A<i> כי ה- instance class של A נוצר ב- pre-compile, עוד לפני שהערך של i מחושב.האפשרויות היחידות שלך להחזיק typed pointer למשתנה שהוא template הן או ע"י מצביע לאותו class בדיוק, כלומרA<100>* ptr = new A<100>;או ע"י מצביע ל- parent class של A.אגב, את מה שאתה מנסה לעשות עם B ו- A אי אפשר לעשות ב- C++. נראה לי שאו שלא הבנת מה אתה צריך לעשות, או שמי שנתן לך לעשות את זה לא מבין מהחיים שלו.
פורסם 2008 בינואר 2817 שנים מנגנון ה template ב C++ הוא מנגנון של זמן קימפול, כל הקוד של ה template מקומפל לקוד אמיתי בשפת C++ בזמן שמשתמשים בפועל במופע אמיתי ומוגדר שלו בקוד.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.