मैं एक सूचक के रूप में टेम्पलेट पैरामीटर के रूप में एक वर्ग के सदस्य के लिए उपयोग करना चाहते हैं: MyStruct<SomeClass, SomeResult, &SomeClass::value> variable
काम करता है की तरह इस struct ठीक का उपयोगसूचक टेम्पलेट पैरामीटर के रूप में
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
, लेकिन मुझे पसंद नहीं है मुझे SomeClass
और SomeResult
निर्दिष्ट करना होगा।
यदि संभव हो तो MyStruct<&SomeClass::value> variable
का उपयोग करना चाहूंगा, लेकिन किसी भी कक्षा को पारित करने की क्षमता खोने के बिना और कोई परिणाम प्रकार नहीं है।
मैं निम्नलिखित कोशिश की, लेकिन वाक्य रचना अवैध है:
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
error: too many template-parameter-lists
मैं एक सहायक समारोह (है कि वास्तव में बजना में काम करता है, लेकिन जीसीसी से इनकार कर दिया है) उपयोग करने की कोशिश:
template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
// ...
}
error: use of parameter `member' outside function body
error: template argument 3 is invalid
क्या यह आसान MyStruct<&SomeClass::value>
होना संभव है, और यदि ऐसा है, तो कैसे?
संबंधित सवाल है कि मेरे सवाल का समाधान नहीं:
- Pointer to class member as template parameter
- C++0x error with constexpr and returning template function
डुप? http://stackoverflow.com/questions/5628121/is-it-possible-to-emulate-templateauto-x – GManNickG
@GManNickG मुझे यकीन नहीं है कि मेरा प्रश्न उस दूसरे प्रश्न पर उबाल जाए। मेरा बहुत संकीर्ण है, और मैक्रो का उपयोग करके मैं बहुत खुश नहीं हूं। – kay
शब्द * पॉइंटर-टू-सदस्य *, नहीं * संदर्भ * सदस्य है। संदर्भ और पॉइंटर्स भाषा में काफी अलग हैं (ठीक है, नहीं * वह * अलग है, लेकिन फिर भी वही नहीं है) –