में कनवर्ट करें मेरे पास std::variant
है जो मैं std::variant
में कनवर्ट करना चाहता हूं जिसमें इसके प्रकार का सुपर-सेट है। क्या ऐसा करने का कोई तरीका है जिससे मुझे एक दूसरे को असाइन करने की अनुमति मिलती है?std :: variant को अन्य std :: variant में प्रकारों के सुपर-सेट
template <typename ToVariant, typename FromVariant>
ToVariant ConvertVariant(const FromVariant& from) {
ToVariant to = std::visit([](auto&& arg) -> ToVariant {return arg ; }, from);
return to;
}
int main()
{
std::variant<int , double> a;
a = 5;
std::variant <std::string, double, int> b;
b = ConvertVariant<decltype(b),decltype(a)>(a);
return 0;
}
मैं बस आदेश नहीं बल्कि इस जटिल कास्टिंग सेटअप के दौरान की तुलना में रूपांतरण करने के लिए b = a
लिखने में सक्षम होना चाहते हैं। std
नामस्थान प्रदूषित किए बिना।
संपादित करें:
error C2679: binary '=': no operator found which takes a right-hand operand of type 'std::variant<int,double>' (or there is no acceptable conversion)
note: while trying to match the argument list '(std::variant<std::string,int,double>, std::variant<int,double>)'
तो 'U' सभी प्रकार के ब्रह्मांड है, और पी, यू है पी नहीं है यू के बराबर होती है? मुझे यह समझने में समस्या हो रही है कि आप किस समस्या को हल करने की कोशिश कर रहे हैं, हो सकता है कि मैं गूंगा हूं: | – P0W
समस्या देखने के लिए सीधे 'b = a' संकलित करने का प्रयास करें। –
त्रुटि निम्नानुसार है: त्रुटि C2679: बाइनरी '=': कोई ऑपरेटर नहीं मिला जो 'std :: variant' (या कोई स्वीकार्य रूपांतरण नहीं है) का दायां हाथ ऑपरेंड लेता है नोट: कोशिश करते समय तर्क सूची से मेल करें '(std :: variant , std :: variant )' –
Bomaz