2014-01-18 3 views
0

Я работаю с 3D-векторами для 3D-графики. Я создал класс vec3 для добавления таких функций, как getX, getY, getZ, setX, setY, setZ, setXYZ ... и так далее.Как я могу расширить класс в библиотеке, такой как Armadillo?

#include <armadillo> 
using namespace arma; 

// An extension to VEC class for Armadillo for 3D graphics. 
class vec3 : public vec 
{ 
public: 

    // Constructor inits vector to 0,0,0 
    vec3() : vec(3,fill::zeros) {} 
    ~vec3(void){}; 

    double getX() const { return at(0); } 
    double getY() const { return at(1); } 
    double getZ() const { return at(2); } 

    void setX(double x){ ?????? = x; } 
}; 

я обнаружил, что потерял в очень необычной ситуации, я никогда не находил:

Как я могу использовать (I), доступ к элементам ... внутри класса?

Для функции геттера, как вы можете видеть, это легко, так как у нас есть функция «at», по крайней мере. Но как создать функцию setX, которая вставляет в положение 0 вектор данного элемента ...

Я пробовал это (i), очевидно, не работал. Я чувствую себя таким новичком здесь ... Где находится «vec»? Std :: vector? ... Я делаю это правильно, выполняя эти простые вещи?

+0

Я не знаю достаточно о базовом классе (vec), чтобы ответить на ваш вопрос. Является ли код для базового класса общедоступным? Можете ли вы опубликовать хотя бы общедоступный заголовок? –

+0

Да, я подумал об этом. Думаю, тогда я должен использовать базовый класс ... правильно ?. Если бы это был std :: vector ... что я должен делать, тогда? Дай мне проверить. – darkgaze

+0

Какая библиотека является броненосцем? Это [это] (http://arma.sourceforge.net/docs.html#Col)? – Gasim

ответ

1

at(0) = x; должен работать, если vec получен из std :: vector, потому что функция может возвращать неизменную ссылку.

+0

Да! Это сработало. Интересно, что мне делать, если бы у меня не было этой функции, например. Разве лучше расширить, чем включить элемент класса? Думаю, это занимает больше памяти. – darkgaze

+0

Включение (или композиция) - отличный вариант, особенно если вы не вводите другие * данные *. –

+0

Другая мысль - как правило, нецелесообразно полагаться на конкретную реализацию, предоставляемую третьей стороной. Они могут решить, что они хотят полностью изменить внутренности в своей следующей версии. –

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

  • Нет связанных вопросов^_^