2013-05-03 46 views
1

我正在創作我自己的課程,我希望能夠像標題一樣啓動它。如果我想使用「a = {x,y};」

a = {x, y}; 

我一直未能找到任何指示我該怎麼做。

+3

初始化,或者分配給它?此外,你將以什麼方式使用列表中的元素? – 2013-05-03 11:30:36

+0

你甚至試過這樣做嗎?它會工作。 – 0x499602D2 2013-05-03 11:32:34

+1

@ 0x499602D2:如果您的編譯器支持C++ 11樣式的支撐初始化器,並且該類型適用於這種分配,它將起作用。 – 2013-05-03 11:45:40

回答

5

假設你真的想能夠以這種方式分配(未初始化),你需要重載operator=,但它的參數類型取決於內部的名單正是上大括號表示。

如果,例如,你總是會被路過的一對值,那麼你可以有一個operator=重載需要std::pair

A& operator=(std::pair<int, int>); 

這將是可調用就像這樣:

A a; 
a = {5, 3}; 

如果你希望能夠通過任意長度列表,你可以有參數類型爲std::initializer_list

A& operator=(std::initializer_list<int>); 

現在所有的以下的就可以了:

a = {}; 
a = {1, 2}; 
a = {5, 3, 5, 2, 3}; 
+0

我猜我想初始化它。我只是SDL_Rect()像這樣: SDL_Rect rect = {x,y,w,h}; 這就是我想要做的,但只有x和y在我自己的班級。 – Tallkotten 2013-05-03 14:12:27

1

由於C++ 11,你可以做到這一點只是讓使用STD作爲參數的構造函數:: initializer_list模板類,你可以重載運營商=以類似的方式。儘管如此,我並不知道C++ 03或C++ 98有任何技巧。從維基百科

Copypasta:

class SequenceClass { 
public: 
    SequenceClass(std::initializer_list<int> list); 
}; 
相關問題