2013-03-21 2 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] - вы могли бы сделать 'My {3}' в [тег: C++ 11]. –

+0

@sftrabbit Слишком плохой msvc не хватает хорошей поддержки для C++ 11. Я ненавижу работать с msvc. –

+2

Что касается «на месте инициализации», я думаю, что вы имеете в виду «[агрегатная инициализация] (http://en.cppreference.com/w/cpp/language/aggregate_initialization)». – Void

ответ

2

Вы можете сделать это:

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

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

[huh, не знал, что сработал в C++ 03] (http://ideone.com/QmTQfX) –

+0

Теперь это синтаксис, который я никогда раньше не видел. Я подумал, что сдержанный список инициализации до того, как C++ 11 будет использоваться только в инициализаторах. – milleniumbug

+1

Это также работает в C. –