2016-04-06 14 views
3

我寫的全局常量我的程序,以及一個對象的數據是本地化和在一起,可能是對我很重要,所以我希望把一切權構造函數。C++:使用在參數列表中直接字面數組對象構造

存在的問題是,雖然在這種情況下,常數是採取其它對象的數組作爲參數的對象。

事情是這樣工作的:

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

,但這樣的事情並不:

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

之類的東西我肯定需要做的不是:

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

上午我試圖做不正確的,有錯誤的構造函數參數類型,或者是字符串文字是唯一可以b的數組文字e放置在這樣的參數列表中?

+2

不是100%肯定你婉做什麼,但它看起來像你可能需要一個'std :: initializer_list'或'std :: array'。 – NathanOliver

+1

我認爲第二個呼叫('..obj({1,2,3,4,};')導致'的std :: initializer_list'被使用,因此存在需要使用是一個構造否則一個構造採用STL容器可以幫助解決這個問題,因爲那些有構造函數初始化服用列表,依次 – iksemyonov

+0

@iksemyonov - 擡眼'的std :: initializer_list'和它的作品正是我希望,謝謝! –

回答

0

除了什麼在評論已經說了,你也可以試試這個(現場觀看here):

#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}); 
} 
相關問題