मुझे निम्न विधि मिली है जो सी-स्टाइल structs का वेक्टर प्राप्त करती है और एक समय में अपने तत्वों को संसाधित करती है।रनटाइम पर टेम्पलेट प्रकार प्राप्त करना
मैं इसे अपने कोड को डुप्लिकेट किए बिना अधिक प्रकार की संरचना प्राप्त करने के लिए विस्तारित करना चाहता हूं।
चूंकि सभी प्रकार के structs में समान फ़ील्ड नाम होंगे, यह टेम्पलेट का उपयोग करके इस नई आवश्यकता को लागू करने के लिए सबसे अधिक सुरुचिपूर्ण होगा।
हालांकि, मैं यह तय नहीं कर सकता कि write_db
फ़ंक्शन पर दूसरा तर्क कैसे पारित किया जाए; वह तर्क जो प्रति संरचना प्रकार — पर एक enum है रनटाइम पर इसे प्राप्त करने के लिए कोई विकल्प है?
enum policy_types {
POLICY_TYPE_A,
POLICY_TYPE_B,
...
};
// old implementation - suitable for single struct only
int policyMgr::write_rule(std::vector <struct policy_type_a> & list) {
//conduct boring pre-write check
//...
for (auto & item : list) {
int ret = write_db(item.key1, POLICY_TYPE_A_ENUM, &item.blob);
}
//new implementation - suitable for multiple structs.
template <POLICY>
int policyMgr::write_rule(std::vector <POLICY> & list) {
for (auto & item : list) {
int ret = write_db(item.key1, type(POLICY) /* how can i get enum according to template type */, &item.blob);
}
मैं struct के प्रत्येक उदाहरण के लिए के रूप में निरंतर enum मूल्य जोड़ने के बारे में सोचा, लेकिन मैं एक बेहतर दृष्टिकोण है कि मेरी बुनियादी struct प्रारूप में बदलाव की आवश्यकता नहीं होगी की आशा है।
हाँ, यह और अधिक सुरुचिपूर्ण (और सी ++ मानक पुस्तकालय की तरह) तरीका यह है है: मेरे समाधान के विपरीत यह 'A' वर्ग को दूषित नहीं करता। एक और। – Bathsheba
मैं गुणों/नीति में ** मूल्य ** के लिए 'टाइप' नाम से बचूंगा। – Jarod42
लेकिन यह रनटाइम के लिए काम नहीं करेगा! यदि वेक्टर बेस पॉलिसी क्लास द्वारा विशिष्ट है और इसमें व्युत्पन्न नीति उपप्रकार शामिल हैं ... टेम्पलेट केवल अपने वेक्टर की विशेषज्ञता का गुण प्राप्त करेगा – barney