2016-10-27 7 views
7

कोड the'following पर विचार करें?compressing struct रचना या विरासत में गद्दी अंतरिक्ष अनुगामी

मैं अंत में एक अनुमानित डेटा सदस्य जोड़कर ए को संशोधित कर सकता हूं, या मैं ए के पैडिंग स्पेस में प्लेसमेंट-निर्माण कर सकता हूं, लेकिन ऐसा करने का एक बेहतर तरीका होना चाहिए।

शायद प्रगा पैक (लेकिन ए के कई डेटा सदस्यों को गठबंधन किया जाना चाहिए और संकुचित नहीं किया जाना चाहिए)? या एक उचित ढंग से रखा alignas?

+0

यह संकलक विशेष pragmas का उपयोग कर संभव हो सकता है या संरचनाओं पैक करने के लिए जिम्मेदार बताते हैं, लेकिन नहीं के सदस्यों के संरेखण खोने के बिना। हालांकि इसे करने का कोई मानक तरीका नहीं है। –

+0

खाली बेस क्लास जोड़ने का प्रयास करें: http://melpon.org/wandbox/permlink/pKXKfaCH9oj90wGY - मुझे नहीं पता कि यह क्यों काम करता है, btw। – dyp

उत्तर

0

वैकल्पिक दृष्टिकोण योग्य है? इस तरह:

struct A { 
    char buf[100]; 
    float *a() { 
     return (float *)&buf[0]; 
    } 
}; 

struct B : A { 
    float *b() { 
     return (float *)&buf[4]; 
    } 
}; 
static_assert(sizeof(B) == sizeof(A), ""); // should pass 
संबंधित मुद्दे