2013-03-21 64 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