मैं एक कक्षा बनाना चाहता हूं जो टेम्पलेट पैरामीटर के साथ किसी अन्य वर्ग में पूरी तरह से परिवर्तनीय है।क्या सी ++ में टेम्पलेट प्रकार में टाइप रूपांतरण को कम करना संभव है?
#include <iostream>
template <typename T>
class A {
T value;
public:
A(T value) {this->value = value;}
T getValue() const {return value;}
};
class B {
int value;
public:
B(int value) {this->value = value;}
operator A<int>() const {return A(value);}
};
template <typename T>
void F(A<T> a) {std::cout << a.getValue() << std::endl;}
void G(A<int> a) {std::cout << a.getValue() << std::endl;}
int main()
{
B b(42);
F(b); // Incorrect
F((A<int>)b); // Correct
G(b); // Also correct
}
यह F(b)
उदाहरण काम करने के लिए करता है, तो दोनों class A
और void F
पुस्तकालय कार्यों हैं संभव है और modifyed नहीं किया जा सकता: यहाँ मैं क्या हासिल करना चाहते का MCE है?
नहीं। आपके जैसे 'एफ' को कॉल करने का मतलब टेम्पलेट तर्क कटौती है। जो बदले में रूपांतरणों पर विचार नहीं किया जाता है। आप 'एफ (बी) 'कॉल कर सकते हैं। –
StoryTeller
डिज़ाइन और उपयोग-मामलों के आधार पर, शायद 'ए' से 'ए'' प्राप्त हो सकता है? शायद 'निजी 'विरासत का उपयोग कर? –