2016-04-06 22 views
3

doğrudan bir dizi kullanarak, programım için global sabitler yazıyorum ve bir nesnenin verilerinin olabildiğince yerelleştirilmiş ve birlikte olabildiğince önemli olduğunu, bu yüzden her şeyi doğru şekilde koymak istiyorum. yapıcı.C++: Nesne yapıcısı, parametre listesinde

Sorun, buradaki sabitin, argüman olarak diğer nesneler dizisini alan bir nesnedir. Bu işi gibi

şeyler:

Constant::Constant(const char * string){...} 
const Constant obj("string"); 

ama işler bu yok gibi: Kesinlikle ne gerek gibi

Constant::Constant(const int * array){...} 
const Constant obj({1, 2, 3, 4}); 

ve şeyleri yok:

Constant::Constant(const vec2 * array){...} 
const Constant obj({vec3(6, 9), vec3(4, 2)}); 

Am I Bunu yanlış yapmaya çalışmak, yanlış yapıcı parametre türlerine sahip olmak veya dize değişmez e bu gibi parametre listesine yerleştirilmiş mi? yorumunda söylenenlerin yanında

+2

Değil% 100 emin std :: initializer_list' veya 'std :: array'. – NathanOliver

+1

Sanırım ikinci çağrı ('..obj ({1,2,3,4,};') 'std :: initializer_list' kullanılmakta, dolayısıyla bunu kullanan bir kurucu olması gerekmektedir. Bir STL konteyneri bunu çözmeye yardımcı olabilir, çünkü bunlar init listelerine sahip olan kuruculara sahipler, buna karşılık – iksemyonov

+0

@iksemyonov - 'std :: initializer_list' aradı ve tam olarak umduğum gibi çalışıyor, teşekkür ederim! –

cevap

0

, ayrıca bu denemek isteyebilirsiniz (Bu here canlı bakınız): Yapmanız wan ancak bir isteyebilirsiniz neye benzediğini

#include <bits/stdc++.h> 

struct Stru { 
    template <std::size_t n> 
    explicit Stru(const int (&arr)[n]) { 
    for (int v : arr) { 
     std::cout << v << ' '; 
    } 
    } 
}; 

int main() { 
    Stru obj({1, 2, 3}); 
}