क्या हेडर फ़ाइल में एक एसटीएल कंटेनर घोषित करना संभव है?आगे एक एसटीएल कंटेनर घोषित करें?
#include <vector>
class Foo
{
private:
std::vector<int> container_;
...
};
मैं इस तरह कुछ करने के लिए सक्षम होना चाहते हैं:
namespace std
{
template <typename T> class vector;
}
class Foo
{
private:
std::vector<int> container_;
...
};
इस किया जा सकता है उदाहरण के लिए, निम्न कोड ले?
मैंने चर्चा के आपके लिंक का पालन किया, लेकिन लोग निष्कर्ष पर नहीं आ रहे हैं। जाहिर है, एसएलएल कार्यान्वयन मानक कंटेनरों में कोई टेम्पलेट पैरामीटर नहीं जोड़ना चाहिए। इसलिए, इसे टेम्पलेट घोषित करने की अनुमति दी जानी चाहिए। – Haplo
यह अपरिभाषित है, @ हैप्लो। यदि कार्यान्वयन * आप * मानक कहता है, जो मानक कहता है उससे परे व्यवहार को परिभाषित करने के लिए चुनते हैं, लेकिन यह अभी भी अपरिभाषित है, इसलिए आपका कोड पोर्टेबल नहीं होगा। निष्कर्ष (बिना बकाया बयानों से निर्णय) यह है कि मानक को इसकी अनुमति देनी चाहिए, लेकिन नहीं, और दो कार्यवाही हैं: मानक प्रकारों को आगे घोषित उपयोगकर्ता structs में लपेटें, या केवल बुलेट काट लें और मानक शीर्षलेख शामिल करें । उत्तरार्द्ध करना आसान है। यूज़नेट पर –
"अनचाहे बकाया वक्तव्य" शायद ही कभी एक आधिकारिक स्रोत हैं। लेकिन, जेरी कॉफिन सही है जब वह उद्धृत करता है [namespace.std]/1। व्यवहार में, यदि आपका कंपाइलर गैर-सिस्टम हेडर में 'नेमस्पेस std' घोषणाओं का निदान करता है, या यदि आपकी मानक लाइब्रेरी C++ में लागू नहीं की गई है, तो आपको कोई समस्या हो सकती है, लेकिन ये चीजें कभी नहीं होतीं – Potatoswatter