बूस्ट का सी 99 स्टिंट कार्यान्वयन बहुत आसान है। हालांकि, एक चीज मुझे बग करता है। वे अपने सभी टाइपपीफ को boost namespace
में डंप करते हैं। यह मैं तीन विकल्पों के साथ छोड़ देता है जब इस सुविधा का इस्तेमाल:बूस्ट का "cstdint" उपयोग
- उपयोग "
using namespace boost
" - उपयोग "
using boost::[u]<type><width>_t
" - स्पष्ट रूप
boost::
उपसर्ग के साथ लक्ष्य प्रकार का संदर्भ लें; उदाहरण के लिए,boost::uint32_t foo = 0;
- विकल्प पराजय № 1 तरह नामस्थान की बात। यहां तक कि यदि स्थानीय दायरे के भीतर उपयोग किया जाता है (उदाहरण के लिए, फ़ंक्शन के भीतर), फ़ंक्शन तर्कों जैसी चीजें अभी भी विकल्प की तरह प्रीफिक्स्ड होनी चाहिए № 3.
- विकल्प № 2 बेहतर है, लेकिन इन प्रकारों का एक गुच्छा है, इसलिए यह प्राप्त हो सकता है शोर।
- विकल्प № 3 शोर का चरम स्तर जोड़ता है;
boost::
उपसर्ग अक्सर प्रश्न के प्रकार की लंबाई के लिए ≥ होता है।
मेरा प्रश्न है: क्या ग्लोबल नेम स्पेस में इन प्रकार के सभी लाने के लिए सबसे खूबसूरत तरीका क्या होगा? क्या मुझे सिर्फ boost/cstdint.hpp
के आसपास एक रैपर लिखना चाहिए जो विकल्प № 2 का उपयोग करता है और इसके साथ किया जाता है?
इसके अलावा, शीर्ष लेख लपेटकर की तरह तो कुलपति ++ 10 (मानक पुस्तकालय हेडर के साथ समस्याओं) पर काम नहीं किया:
namespace Foo
{
#include <boost/cstdint.hpp>
namespace boost_alias = boost;
}
using namespace Foo::boost_alias;
संपादित करें: मुझे लगता है कि एक और विकल्प पूर्वप्रक्रमक उपयोग करने के लिए है इसे वीसी 10 पर काम करने के लिए? ऊपर स्निपेट लेना:
#ifndef FOO_HPP_INCLUDED
#define FOO_HPP_INCLUDED
#if _MSC_VER >= 1600 /*VC++ 10*/ || defined USE_NATIVE_STDINT_HEADER
#include <stdint.h>
#else
namespace cstdint_wrapper
{
#include <boost/cstdint.hpp>
namespace boost_alias = boost;
}
using namespace cstdint_wrapper::boost_alias;
#endif
#endif
कम काम, मुझे लगता है?
http://stackoverflow.com/questions/1481733/portable-c-03-exact-width-types –
@gf: निफ्टी स्क्रिप्ट, धन्यवाद के संभावित डुप्लिकेट। – patt0h
आपको इन प्रकारों में से * सभी * की आवश्यकता क्यों है? मैं अक्सर उनमें से एक या दो का उपयोग करता हूं, लेकिन मुझे कभी भी उन सभी की आवश्यकता याद नहीं है। – jalf