VS6 ו-templates

zagzagzag

New member
VS6 ו-templates

יש לי את הקוד הבא (בקיצורים הכרחיים):
class MyClass { template<class OutputType> write(std::eek:stream& os, const OutputType& output) { os << output; } };​
אני מנסה לקמפל ב-VS6 (עם SP5) -
MyClass myClass; myClass.write<int>(cout, 5);​
ומקבל -
error C2062: type 'int' unexpected​
אם אני מוציא את הפונקציה מה-class הקוד מתקמפל, אבל אני צריך אותה בתוך ה-class. הקוד מתקמפל ב-GCC 3.3.1, אז אני מניח שהבעיה היא ב-VS. יש איזשהי דרך לעקוף את VS בקטע הזה או שאני צריך לחשוב על מימוש אחר?
 

vinney

Well-known member
אפשר לשאול אותך שאלה?

אם פונקציה שהיא MEMBER במחלקה היא תבנית, למה לא כל המחלקה תבנית? או לחלופין, מה הפונקציה הזאת עושה במחלקה? איך היא קשורה? סתם תהייה. לשאלתך: שאלה נגדית : אתה לא חייב לכתוב את <int>. יש סיבה מיוחדת שאתה כותב? אצלי זה פתר את הבעיה.
 

Moridin

New member
אכן

לא צריך לציין את ה-template argument בקריאה ל-template function.
 

עופר ב.ה

New member
מאידך

מדובר ב- work-around. התמיכה של VS6 ב template functions inside non-template classes היא חלקית, ולא תואמת לסטנדרט (שנסגר אחרי ש- VS6 יצא..)
 

zagzagzag

New member
תודה

הפתרון שבחרתי בסוף היה להוציא את הפונקציה מהמחלקה (היא לא צריכה להיות שם), אבל תודה בכל מקרה.
 

DadleFish

New member
בפשטות,

תעבור ל-VS7.1. לפחות ל-VS.NET 2003. אני אישית כבר על ה-BETA של 2005 ומאוד מרוצה. אחד הדברים שלוקים בחסר ב-VS6 הוא התמיכה הלא סטנדרטית ב-templates.
 

zagzagzag

New member
האו"פ החליטה VS6

אז עובדים עם VS6
מה שמסקרן אותי, הוא מה עשו מתכנתים לפני גרסה 7, לא השתמשו ב-templates ?
 

vinney

Well-known member
לכל בעיה יש פתרון

אתה משתמש בLEARNING EDITION? נתקלתי שם בעוד באגים שלא קורים בENTERPRISE... עקרונית על תעשה את מה שאתה לא חייב. את <int> אתה לא חייב, אז אל תרשום, הוא לא תורם לך בכלום. לעשות MEMBER TEMPLATE FUNCTION רק יוריד לך נקודות, לא יוסיף, אז אל תעשה
בקיצור - KEEP IT SIMPLE.
 

zagzagzag

New member
משלב בין Learning ל-Enterprise

כי יש לי גישה לשתי הגרסאות. עד עכשיו דווקא לא מצאתי הבדלים גדולים בינהן, בתנאי שהתקנתי את אותו SP (היו דברים שלא עבדו על ה-learning לפני שהתקנתי SP5). מאיזה באגים בגרסת Learning כדאי להיזהר? את ה-member template function כבר העפתי, ואני משתדל להפסיק להילחם עם הקומפיילר. את הניסיונות הבאים שלי עם השפה (C++ templates: the complete guide מחכה לי
) אני אעשה עם קומפיילר נורמלי.
 
למעלה