עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

בעיה בלינקר של VS C++ 6.0

Featured Replies

פורסם

יש שתי בעיות בהצעה הנ"ל:

1) לא כולם עובדים עם exceptions.

2) הבעיה תתגלה רק ב-runtime במקום בזמן קומפילציה.

יש פתרונות טובים יותר והם מתבססים על template specialization:

פתרון אחד הוא לתת פונקציה כללית אשר מכילה שגיאה והתמחות ספציפית ל-string אשר מכילה קוד נכון.

מי שינסה להשתמש בפונקציה על משהו שהוא לא string יקבל את הגרסה הכללית אשר אינה מתקמפלת.

כשישתמשו בפונקציה עם string אז הקומפיילר יבחר את הגרסה המיוחדת, ואז לא תהיה בעיה.

וריאציות נוספות מתבססות על ירושה, על partial specialization, או על בלאגן אחר.

ניתן גם להשתמש ב-static_assert או static_check וב-traits.

העקרון החשוב: עדיפה שגיאה בזמן קומפילציה משגיאה בזמן ריצה.

פורסם

אתה יכול להסביר טיפה על איך לגרום לשגיאה רק אם קוראים לפונקציה?

ומה זה static_assert/traits?

פורסם

לכתוב קוד אסור לדוגמא:

template < typename T >
inline bool fun( const T& val )
{
struct {};
}

template <>
inline bool fun<string> ( const string& val )
{
return val.size() > 0;
}

יש עוד הרבה גרסאות. אני ממליץ לבדוק את compile time assert ב-BOOST .

הנה גרסה C-ית מ-Loki:

#define STATIC_CHECK(expr, msg) \
typedef char ERROR_##msg[1][(expr)]

פורסם
  • מחבר

מגניב הCOMPILE TIME ASSERT.

רק לא הבנתי מה זה הBOOST, והאם קיימת גירסא C++ית(או שזה פשוט יראה אותו דבר)?

תודה.

פורסם

Boost היא ספרייה לא סטנדרטית, אבל ידועה מאוד ומשמשת כ"השלמה" ל-STL ולספריות אחרות.

היא נכתבת ומתוחזקת ע"י אנשים רציניים מאוד, והמטרה הסופית היא להכניס חלקים ממנה לסטנדרט של C++. הספריה כמובן חינמית לחלוטין.

http://www.boost.org/

יש כמובן גרסאות C++ טובות יותר ל-compile time assert אשר עושות שימוש ב-templates. ספרית BOOST כוללת אוסף שלם של compile time predicates.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.