स्थिर आवेषण संकलन समय में चीजों की जांच के लिए बहुत सुविधाजनक हैं। एक साधारण स्थिर ज़ोर मुहावरा इस तरह दिखता है:कॉन्स चर के लिए स्थैतिक जोर?
template<bool> struct StaticAssert;
template<> struct StaticAssert<true> {};
#define STATIC_ASSERT(condition) do { StaticAssert<(condition)>(); } while(0)
यह
STATIC_ASSERT(sizeof(float) == 4)
की तरह सामान के लिए अच्छा है और:
#define THIS_LIMIT (1000)
...
STATIC_ASSERT(THIS_LIMIT > OTHER_LIMIT);
लेकिन #define
का उपयोग कर परिभाषित करने का "सी ++" तरीका नहीं है स्थिरांक।
namespace {
const int THIS_LIMIT = 1000;
}
या यहाँ तक कि: सी ++ आप एक गुमनाम नाम स्थान का उपयोग करना होगा
static const int THIS_LIMIT = 1000;
इस के साथ परेशानी यह है कि एक const int
साथ आप STATIC_ASSERT()
उपयोग नहीं कर सकते हैं और आप एक रन-टाइम का सहारा चाहिए जांचें कि मूर्ख क्या है।
क्या मौजूदा सी ++ में इसे ठीक से हल करने का कोई तरीका है?
मुझे लगता है कि मैं पढ़ा है C++ 0x यह करने के लिए कुछ की सुविधा है ...
संपादित
ठीक है तो यह
static const int THIS_LIMIT = 1000;
...
STATIC_ASSERT(THIS_LIMIT > 0);
ठीक संकलित
लेकिन यह:
static const float THIS_LIMIT = 1000.0f;
...
STATIC_ASSERT(THIS_LIMIT > 0.0f);
नहीं करता है।
(विजुअल स्टूडियो 2008 में)
कैसे आते हैं?
आप BOOST_STATIC_ASSERT के बजाय एनआईएच स्थिर आवेषण का उपयोग क्यों कर रहे हैं? http://www.boost.org/doc/libs/1_43_0/doc/html/boost_staticassert।एचटीएमएल –
मैं कुछ मूर्ख कॉर्पोरेट कारण – shoosh
के लिए बूस्ट (अभी तक) का उपयोग नहीं कर सकता क्या आपको लगता है कि आप इस मामले में अभिन्न स्थिरांक का उपयोग नहीं कर सकते हैं? उपर्युक्त बस ठीक काम करना चाहिए। –