मेरे पास struct
है जिसमें एक सरणी है, और मैं सरणी पर अग्रेषित करने के लिए संरचना के निर्माता को प्रारंभकर्ता सूची पास करना चाहता हूं। इसे समझने के लिए, मैं करने की कोशिश की:प्रारंभकर्ता सूची के साथ सदस्य सरणी को प्रारंभ करने का सही तरीका क्या है?
#include <initializer_list>
struct Vector
{
float v[3];
Vector(std::initializer_list<float> values) : v{values} {}
};
int main()
{
Vector v = {1, 2, 3};
}
error: cannot convert ‘std::initializer_list<float>’ to ‘float’ in initialization
v
के लिए I tried using parentheses instead of braces लेकिन उस त्रुटि दिया:
error: incompatible types in assignment of ‘std::initializer_list<float>’ to ‘float [3]’
यह करने के लिए कोशिश कर रहा है के लिए मेरा मुख्य प्रेरणा से बचने के लिए है निम्नलिखित चेतावनी है कि क्लैंग उत्पन्न करता है:
template <int N>
struct Vector
{
float v[N];
};
template <>
struct Vector<2>
{
float x, y;
};
int main()
{
Vector<2> v2 = {1.0f, 2.0f}; // Yay, works
Vector<3> v3 = {1.0f, 2.0f, 3.0f}; // Results in warning in clang++
Vector<3> u3 = {{1.0f, 2.0f, 3.0f}}; // Must use two braces to avoid warning
// If I could make Vector<N> take an initializer list in its constructor, I
// could forward that on to the member array and avoid using the double braces
}
warning: suggest braces around initialization of subobject
तो मेरा प्रश्न है: मैं प्रारंभकर्ता सूची के साथ सदस्य सरणी कैसे प्रारंभ कर सकता हूं? (यानी कैसे मैं पहली बार कोड काम कर सकते हैं? या यह नहीं हो सकता है? std::copy
उपयोग करने के लिए
कुल के लिए, आपको एक सीटीआर की भी आवश्यकता नहीं होगी। ध्यान दें कि 'प्रारंभकर्ता_सूची' का आकार परिवर्तनीय है। 'प्रारंभकर्ता-सूची' और _list -itialization_ (जो एक भाषा निर्माण है और प्रारंभकर्ता-सूची का उपयोग कर एक ctor को कॉल करने का कारण बन सकता है) के साथ प्रारंभ करने के बीच भी एक अंतर है। – dyp
आप वास्तव में ऐसा नहीं कर सकते हैं, लेकिन क्या आप इसके बजाय 'std :: array' का उपयोग कर सकते हैं? – juanchopanza
वह std :: सरणी का उपयोग कर सकता है, लेकिन मैंने इसे भाषा के बारे में एक प्रश्न के रूप में पढ़ा, मानक पुस्तकालय नहीं। और, किसी के भी सम्मान के साथ, किसी को मानक लाइब्रेरी पढ़ने के लिए कहने के लिए शेक्सपियर पढ़कर अंग्रेजी सीखने के लिए एक बच्चा बता रहा है। तो std :: सरणी बहुत अच्छा जवाब नहीं है। –