c++ - Explicitly forbid a concrete class template specialisation -
मेरे पास एक क्लास टेम्पलेट है:
टेम्पलेट & lt; टाइपनाम ... bounded_types & gt; संरचना संस्करण {};
लेकिन बाध्य प्रकारों की खाली सूची को नकारना चाहते हैं, जैसे कि variant & lt; & gt;
को संकलन समय पर मना होना चाहिए। मैं निम्नलिखित कर सकता हूँ:
टेम्पलेट & lt; & gt; संरचना प्रकार & lt; & gt ;;
लेकिन यह बहुत स्पष्ट नहीं है: अगर मेरे संस्करण लाइब्रेरी में बहुत सारे हेडर हैं, तो यह स्पष्ट नहीं है कि क्या ऊपर की विशेषता आगे की घोषणा किसी वर्ग के नीचे, नीचे कहीं परिभाषित। मेरे मन में, आदर्श काल्पनिक समाधान होगा:
टेम्पलेट & lt; & gt; संरचना संस्करण & lt; & gt; = हटाना;
यह स्पष्ट रूप से बड़ी हद तक दिखता है, लेकिन दुख की बात है, बदले में, C ++ वाक्यविन्यास द्वारा मना किया गया।
वर्णित इरादों को पूरा करने का सबसे स्पष्ट तरीका क्या है?
टेम्पलेट & lt; typename ... bounded_types & gt; संरचना प्रकार {static_assert (sizeof ... (bounded_types)> 0, "खाली संस्करण अवैध है"); };
देखें कि यह कैसे विफल रहता है:
देखें कि यह कैसे सफल होता है:
Comments
Post a Comment