सबसे अच्छा बात एक का उपयोग किया जाएगा प्रारंभकर्ता सूची
#include <initializer_list>
#include <vector>
class GenericNode {
public:
GenericNode(std::initializer_list<GenericNode*> inputs)
:inputs_(inputs) {} //well that's easy
private:
std::vector<GenericNode*> inputs_;
};
int main() {
GenericNode* ptr;
GenericNode node{ptr, ptr, ptr, ptr};
} //compilation at http://stacked-crooked.com/view?id=88ebac6a4490915fc4bc608765ba2b6c
क्या आपके पास पहले से करीबी, सी ++ 11 का उपयोग वेक्टर के initializer_list उपयोग करने के लिए है:
+०१२३५१६४१०६१
template<class ...Ts>
GenericNode(Ts... inputs)
:inputs_{inputs...} {} //well that's easy too
//compilation at http://stacked-crooked.com/view?id=2f7514b33401c51d33677bbff358f8ae
और यहां कोई सी ++ 11 संस्करण नहीं है जिसमें कोई प्रारंभकर्ता_लिस्ट नहीं है। यह बदसूरत और जटिल है, और कई कंपाइलरों से गायब सुविधाओं की आवश्यकता है। प्रारंभकर्ता सूची
template<class T>
using Alias = T;
class GenericNode {
public:
template<class ...Ts>
GenericNode(Ts... inputs) { //SFINAE might be appropriate
using ptr = GenericNode*;
Alias<char[]>{(//first part of magic unpacker
inputs_.push_back(ptr(inputs))
,'0')...,'0'}; //second part of magic unpacker
}
private:
std::vector<GenericNode*> inputs_;
};
int main() {
GenericNode* ptr;
GenericNode node(ptr, ptr, ptr, ptr);
} //compilation at http://stacked-crooked.com/view?id=57c533692166fb222adf5f837891e1f9
//thanks to R. Martinho Fernandes for helping me get it to compile
सबकुछ से संबंधित नहीं, मुझे नहीं पता कि वे पॉइंटर्स के स्वामी हैं या नहीं। यदि वे हैं, तो इसके बजाय std::unique_ptr
का उपयोग करें।
स्रोत
2012-12-20 20:11:33
आपके उदाहरण में कुछ अमान्य वाक्यविन्यास है। आप क्या पूछने की कोशिश कर रहे हैं? –
'std :: startizer_list <जेनेरिक नोड *>' का उपयोग करें। –
क्षमा करें। स्पष्टीकरण के लिए, मैं std :: वेक्टर को पॉप्युलेट करने के लिए तर्क सूची का उपयोग कैसे करूं? @MooingDuck, मैं std :: startizer_list में देखूंगा। धन्यवाद। – fredbaba