2015-07-01 2 views
4

Надеюсь, что это не было задано слишком много раз, я попытался выполнить поиск, но ничего не мог найти (может быть, я просто не знал, как его правильно установить сроки). Простой вопрос:«возвращение» объекта без его включения C++

У меня есть класс vec3, который имеет 3 поля x, y и z . В нем функция flatten, что я хочу вернуть объект vec2 (или что-то вроде объекта vec2, из которого можно построить) поля x и y. Поскольку это единственная функция класса vec3, которая связана с vec2, я бы не хотел включать vec2. Есть ли лучший способ вернуть такой простой объект (два двухместных) без каких-либо включений?

Я думал о возвращении указатель, но что произойдет, если я это сделать:

vec2 v2 = vec3(x,y,z).flatten(); // vec3(x,y,z) is the constructor

Будут временные Vec3 объекты х и у данных все еще существуют, когда v2 пытается построить из них? В этом случае vec2 = double* будет определен в классе vec2.

vec3 и vec2 выглядеть следующим образом:

class vec3{ 
    double x,y,z; 
} 

Would х у и г должны быть последовательными в памяти? Думаю, нет.

Спасибо за ваше время.

ответ

5

Вам нужно всего лишь частичное объявление для типа возвращаемого значения:

Vec3.h:

// No #include "Vec2.h" ! 

class vec2; // Partial declaration 

class vec3 { 
    //... 
    vec2 flatten() const; 
    //... 
}; 

Vec3.cpp:

#include "Vec2.h" 

vec2 vec3::flatten() const { 
    //... 
} 
+0

приятно! Большое спасибо за быстрый ответ! – maxx

Смежные вопросы