#include <iostream>
struct X2
{
int i;
int j;
char buf[10];
};
X2 glob{1,2,"abc"}; // OK
struct X
{
X2 x2;
template<typename... Args>
X(Args&&... args): x2{args...} {}
};
int main()
{
X x; // OK
X y{1, 2}; // OK
X z{1, 2, "abc"}; // error
}
अंतिम पंक्ति देता त्रुटि: 17 : error: invalid conversion from 'const char*' to 'char' [-fpermissive]
बिल्कुल सही अग्रेषण में विफल रहता है जब लक्ष्य सरणी के साथ कुल है
अगर मैं std::forward(args)...
args...
के बजाय का उपयोग करें तो और भी अधिक त्रुटियों आ; और अगर त्रुटियां स्ट्रिंग अक्षर के बजाय {'a', 'b', 'c', '\0'}
प्रारंभकर्ता के रूप में उपयोग करने का प्रयास करती हैं तो त्रुटियां भी होती हैं।
इस काम करने के लिए एक रास्ता है, यानि कि X z{......};
जहां ब्रेसिज़ कि x2
के लिए एक कानूनी प्रारंभकर्ता होगा अंदर कुछ भी स्वीकार किया जाता है और वास्तव में है x2
प्रारंभ अनुमति देते हैं?
"* इस काम करने के लिए एक रास्ता है" *, निर्माता निकालें, या 'buf' –
लेखन' 'एक', 'बी' के प्रकार के रूप में उपयोग 'std :: स्ट्रिंग', ' सी ',' एबीसी 'के बजाय' '' '' 0 '' सी ++ 17 –