नंबर एक सी ++ समारोह की वापसी प्रकार केवल स्पष्ट टेम्पलेट पैरामीटर या प्रकार अपने तर्कों का के आधार पर भिन्न हो सकते हैं। यह अपने तर्कों के मूल्य के आधार पर भिन्न नहीं हो सकता है।
हालांकि, अगर आप एक प्रकार कई अन्य प्रकार का मिलन है कि बनाने के लिए विभिन्न तकनीकों का उपयोग कर सकते हैं। दुर्भाग्यवश यह आपकी मदद नहीं करेगा, क्योंकि ऐसी एक तकनीक शून्य है * और मूल प्रकार पर वापस आना दर्द होगा।
हालांकि, अगर आप बाहर के अंदर समस्या मोड़ तुम क्या चाहते प्राप्त कर सकते हैं द्वारा। मुझे लगता है कि आप उदाहरण के लिए, आप कुछ कोड की तरह के रूप में तैनात का उपयोग करना चाहते हैं: सी ++ संकलन समय पर p_pixels के प्रकार के लिए ज़रूरी है
void bitmap_operation(void *data, int depth, int width, int height) {
some_magical_type p_pixels = returnPointer(data, depth);
for (int x = 0; x < width; x++)
for (int y = 0; y < width; y++)
p_pixels[y*width+x] = some_operation(p_pixels[y*width+x]);
}
वजह से, यह काम नहीं करेगा के रूप में है।
template<typename PixelType>
void bitmap_operation_impl(void *data, int width, int height) {
PixelType *p_pixels = (PixelType *)data;
for (int x = 0; x < width; x++)
for (int y = 0; y < width; y++)
p_pixels[y*width+x] = some_operation(p_pixels[y*width+x]);
}
void bitmap_operation(void *data, int depth, int width, int height) {
if (depth == 8)
bitmap_operation_impl<uint8_t>(data, width, height);
else if (depth == 16)
bitmap_operation_impl<uint16_t>(data, width, height);
else if (depth == 32)
bitmap_operation_impl<uint32_t>(data, width, height);
else assert(!"Impossible depth!");
}
अब संकलक आपके लिए अपने आप bitmap_operation_impl के लिए तीन कार्यान्वयन उत्पन्न होगा: लेकिन हम क्या कर सकते हैं अपने आप में bitmap_operation कर एक टेम्पलेट हो, तो एक स्विच गहराई के आधार पर के साथ लपेट है।
कैसे आप इस का उपयोग करने की उम्मीद करते हैं? संभावना है कि आपका डिज़ाइन सर्वश्रेष्ठ ओओपी प्रथाओं का पालन नहीं करता है। – outis
एडोब फोटोशॉप एसडीके मैं जो उपयोग कर रहा हूं, और वे शून्य * – Joel
का उपयोग करते हैं, क्या आप फ़ोटोशॉप एसडीके फ़ंक्शन को कॉल सहित एक उपयोग उदाहरण दे सकते हैं? – outis