При выполнении чего-нибудь для сети или какого-либо обращенного к передней стороне приложения в этом отношении Вы действительно должны ее себе для чтения...
Используя C ++ 0x, почти завершенный новый стандарт C ++ (уже реализованный в последних версиях gcc и msvc IIRC), вы можете делать именно так, как хотите! Просто используйте std :: array вместо int [3].
std::array<int, 3> array_func()
{
return {1,1,1};
}
int main(int argc,char * argv[])
{
std::array<int, 3> point = array_func();
}
Поместите массив в структуру. boost :: array
- это такой пакет:
boost::array<int, 3> array_func() {
boost::array<int, 3> a = {{ 1, 1, 1 }};
return a;
}
int main() {
boost::array<int, 3> b = array_func();
}
Быстро и грязно:
template<typename E, size_t S>
struct my_array {
E data[S];
};
Обратите внимание, как вы можете использовать синтаксис агрегированной инициализации.
Вы можете обернуть его в struct
, чтобы сделать его возвращаемым по значению:
struct Vec3
{
float x[3];
}
Vec3 array_func()
{
Vec3 x = { 1.f, 1.f, 1.f };
return x;
}
Я не думаю, что вы можете использовать синтаксис инициализатора массива непосредственно в возврате заявление. Конечно, вы можете ввести конструктор (в конце концов, структуры - это просто классы со всеми открытыми членами):
struct Vec3
{
Vec3(a, b, c)
{
x[0] = a;
x[1] = b;
x[2] = c;
}
float x[3];
}
Vec3 array_func()
{
return Vec3(1.f, 1.f, 1.f);
}
boost :: array - это оболочка для массива на основе стека.
Обратите внимание, что выделение стека будет дешевле, чем использование «нового», когда вы не используете необходимость копировать большие массивы.
вы не можете вернуть массив фиксированного размера в C ++. вы можете вернуть указатель на int (который будет использоваться как массив), но для этого потребуется выделить массив в куче с помощью new
.
в любом случае, вы можете передать свой массив в качестве аргумента функции:
void array_func( int result[3])
{
result[0] = 1;
result[1] = 1;
result[2] = 1;
}
int main(int argc,char * argv[])
{
int point[3];
array_func( point );
}
однако это больше похоже на C, чем на C ++ ...