Как использовать typedef с параметрами инициализатора класса в C ++? - PullRequest
0 голосов
/ 30 июня 2018

Я задаю этот вопрос вот так, потому что не знаю, как его лучше сформулировать.

Сейчас я пишу 3D-приложение с использованием библиотеки Eigen. У Eigen есть только класс Vector, но мне нужны разные типы векторных и точечных данных.

Оба могут быть представлены

Eigen::Vector4d(x,y,z,w) 

где w равно 1 для точки и 0 для вектора.

Я знаю, что могу определить тип, используя

typedef vec3d Eigen::Vector4d

или

#define point3d Eigen::Vector4d

но есть ли способ определить его таким образом, чтобы w всегда было 0 для вектора и 1 для точки?

typedef vec3d(x,y,z) Eigen::Vector4d(x,y,z,w) 

не работает.

1 Ответ

0 голосов
/ 30 июня 2018

Вы можете наследовать от него и предоставить новый конструктор:

struct vec3d : Eigen::Vector4d {
    vec3d(double x, double y, double z) : Vector4d(x, y, z, 0) {}
};

Или, что я бы предпочел, это написать заводскую функцию, например:

Eigen::Vector4D make_vector(double x, double y, double z) {
    return {x, y, z, 0};
}
...