एक अज्ञात संरचना के प्रकार पर एक विधि/फ़ंक्शन parametrized बनाना आसान है। संरचना की परिभाषा के बाद टाइप करना भी आसान है।संरचना के भीतर एक नया प्रकार बनाने के लिए एक अनाम नाम के प्रकार को निकालने के लिए कैसे?
struct Foo {
template <typename T> Foo(T*) { /* we have access to T here */ }
}
template <typename T> void baz(T*) { /* we have access to T here */ }
template<typename T> struct Bar {
/* we have access to T here */
};
void test() {
struct {
Foo foo { this }; // access in a constructor
void test() { baz(this); } // access in a function
} unnamed;
Bar<decltype(unnamed)> bar; // access after definition
}
लेकिन वहाँ किसी भी "जादू" कि struct दायरे में unnamed
के प्रकार के उपयोग की अनुमति सकता है, या एक स्थिर विधि में है - नहीं इसके निर्माता/उदाहरण विधि के भीतर या के बाद एक उदाहरण घोषित किया जाता है केवल? यह तुच्छ जब struct नाम पर है है:
// How to make it work with S absent (an unnamed struct) ?
struct S {
Bar<S> foo; // how to get our type in an unnamed struct?
static void wrapper(void * instance) {
static_cast<S*>(instance)->method(); // how to get our type in an unnamed struct?
}
void method() { ... }
} would_be_unnamed;
यह सवाल एक question about how to implement a destructor in an unnamed struct से प्रेरित हुआ। तुच्छ समाधान वहाँ एक अनाम से एक में एक नामित struct रैप करने के लिए था - इस तरह के आवरण, आदि
struct { struct S { ... } s; } unnamed;
तो किसी भी अन्य प्रकार के साथ संघर्ष के बिना मैक्रो में इस्तेमाल किया जा सकता प्रकार का उपयोग पहेली को सुलझाने के लिए एक अलग समाधान की अनुमति होगी प्रेरणादायक सवाल।
आप इसे नाम क्यों नहीं देते? यदि स्कोपिंग के साथ कोई समस्या है (उदाहरण के लिए मैक्रो का उपयोग करते समय), क्या आप इसे लैम्ब्डा में लपेट सकते हैं, '[] {struct NAME {...}; वापस NAME(); }() '? – dyp
@dyp यह एक व्यावहारिक समस्या के समाधान की तलाश में नहीं है - या, व्यावहारिक समस्या (रचनात्मक/विनाशकों को एक नामहीन संरचना में डालने का) एक साधारण सुरुचिपूर्ण समाधान (एक घोंसला वाला नाम वर्ग) है जिसकी आवश्यकता नहीं है हल करने के लिए इस समस्या को हल किया जाना चाहिए। मैं बस सोच रहा हूं कि ऐसा करने का कोई तरीका है, बस इतना ही। –
संबंधित: [क्या मैं एक स्वायत्त 'स्वयं' सदस्य प्रकार को C++ में लागू कर सकता हूं?] (Http://stackoverflow.com/q/21143835/) – dyp