2013-03-21 54 views
2

我不認爲「適當」是合適的術語,但我缺乏更好的術語。就地初始化POD

我有一個POD,讓我們說:

struct My { 
    int a; 
}; 
//and suppose a operator<< to stream is also defined 

而且我可能會使用它的權利是:

My my = {3}; 
std::cout << my << std::endl; 

我想知道如果我能做到下同但不使用輔助FUNC :

template <typename ANY> 
My helper(ANY value) { 
    My r = {value}; 
    return r; 
} 
std::cout << helper(3) << std::endl; 

我要尋找一個構造函數做同樣的事情,但因爲我有一個POD我不能創建一個騙子structor。

+5

您指定太糟糕了[標籤:C++ 03] - 你可以做我的'{3}'中[標籤:C++ 11]。 – 2013-03-21 14:03:06

+0

@sftrabbit太糟糕的msvc缺乏對C++ 11的良好支持。我討厭使用msvc。 – 2013-03-21 15:56:31

+2

關於「就地初始化」,我認爲你的意思是「[聚合初始化](http://en.cppreference.com/w/cpp/language/aggregate_initialization)」。 – Void 2013-03-21 17:19:22

回答

2

你可以這樣做:

struct My { 
    int a; 
    int b; 
    int c; 
    float d; 
}; 

void somefunc() { 
    cout << (My){1, 2, 3, 4.5} << endl; 
} 
+0

[呵呵,不知道在C++ 03中工作](http://ideone.com/QmTQfX) – 2013-03-21 17:21:25

+0

現在這是我從未見過的語法。我認爲C++ 11之前的加載init列表只能用於初始化程序。 – milleniumbug 2013-03-21 17:24:56

+1

這也適用於C. – 2013-03-21 17:26:43