Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
PlayerDark
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 62
#1

Совместимость типов - C++

02.12.2009, 21:24. Просмотров 1191. Ответов 5
Метки нет (Все метки)

Если я использую две разных библиотеки, в каждой из которых определен свой класс Vector3d(трехмерный вектор), то как мне организовать общий интерфейс между ними, тк эти два класса во многом схожи, но не являются совместимыми ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2009, 21:24     Совместимость типов
Посмотрите здесь:

Как проверить совместимость типов в VC++ ? - C++
Как проверить совместимость типов в VC++?

Не совместимость типа - C++
После написания программы программы у меня возникла проблема связанная скорее всего с соответствием типов друг другу, при этом case'2'...

Совместимость программы - C++
Создал маленькую программу и передал ее другу. (У друга windows xp) Когда он ее запустил у него вышла ошибка "путь к...

C++, UTF-8 и совместимость - C++
Имеется некоторая программа (шутка, прога ещё в проекте). Она по сути является одним из кусков системы общения (пишу себе псевдоИИ, но не...

преобразование типов - C++
memcpy((void*)stroka,(void*)stroka,ykaz_bukva-ykaz_temp+1); что нужно поставить вместо void* чтоб не было предупреждений

Сравнение типов - C++
есть функция: void equalSep(char* str) { // пытаюсь сравнить str и "." или любой другой символ } как мне сделать...

преобразование типов в с++ - C++
Собственно вопрос в следующем. Распишите пожалуйста по шагам что происходит при выполнении данного кода { //... myclass x(10);...

Преобразование типов - C++
С учебника переписал код на применение структур, но возникла проблема с преобразованием типов. Вот код проги: #include "stdafx.h" ...

преобразование типов - C++
Здравствуйте, подскажите пожалуйста как преобразовать данные типа LPARAM в LPCWSTR

Преобразование типов - C++
Господа, мое терпение и срок, отведенный мне на решение задачи начальством, кончились. У меня одна функция возвращает один тип, а...

преобразование типов - C++
помогите у меня программа выдает ошибки преобразования типов подскажите как должно быть чтоб все работало программа делает перестановки...

Преобразования типов - C++
Доброго времени суток. Разбираясь с преобразователями типов в С++ возник вот такой вопрос: допустим у нас есть класс Alpha и какая-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PlayerDark
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 62
04.12.2009, 17:36  [ТС]     Совместимость типов #2
Тема актуальна.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
04.12.2009, 18:00     Совместимость типов #3
Зависит от того, что ты понимаешь под "общим интерфейсом". Решения могут быть разными - от элементарного преобразующего конструктора до реализации паттерна Wrapper через абстрактный интерфейс.
PlayerDark
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 62
04.12.2009, 19:54  [ТС]     Совместимость типов #4
Мне нужен универсальный интерфейс для работы с такими классами. Я не ознакомлен с данной темой и поэтому не в курсе. Если есть какой нибудь материал или примеры выложите ссылку плз.
Про реализацию по подробнее пожалуйста.

PS в гугл не посылать.
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
05.12.2009, 00:02     Совместимость типов #5
Если вместо "общий интерфейс" сказать "универсальный интерфейс", это много информации не добавит. Доступны ли исходники библиотек? Возможно ли их совместное использование (т.е. не возникает ли конфликта имён)? Подойдёт ли возможность использовать один из этих классов в качестве основного? Содержит ли другой класс достаточно информации для создания основного?
Если ответ на все вопросы утвердительный, то можно использовать преобразующий конструктор. Допустим, ты хочешь иметь возможность неявно превращать объекты типа Vector3dF в Vector3dD:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Vector3dF{
public:
    Vector3dF(float x, float y, float z): X(x), y(Y), Z(z) {}
    float Len() const {return sqrt(X*X + Y*Y + Z*Z);}
    float X, Y, Z;
};
 
class Vector3dD{
public:
    Vector3dD(double x, double y, double z): X(x), y(Y), Z(z) {}
    double Len() const {return sqrt(X*X + Y*Y + Z*Z);}
    double X, Y, Z;
    // Преобразующий конструктор
    Vector3dD(const Vector3dF &vec): X(vec.X), Y(vec.Y), Z(vec.Z) {}
};
С таким конструктором ты можешь смело подставлять значения типа Vector3dF в места, где требуется Vector3dD:
C++
1
2
3
4
5
6
7
Vector3dD Neg(Vector3dD vec)
{
    return Vector3dD(-vec.X, -vec.Y, -vec.Z);
}
 
Vector3dF vf(1.2f, 1.4f, 1.6f);
Vector3dD vd = Neg(vf);
Во втором случае создаёшь класс-интерфейс Vector3d, с которым и будешь работать через виртуальные функции:
C++
1
2
3
4
5
class Vector3d{
public:
    virtual double Len() const = 0;
    virtual ~Vector3d() {};
};
. Потом создаёшь потомки, которые содержат ссылки или экземпляры Vector3dF и Vector3dD и реализуют заданный интерфейс, просто обращаясь к соответствующим функциям. Они тоже могут использовать порождающие конструкторы, а обращаться к Vector3d надо будет по указателям или по ссылке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class WrapperF: public Vector3d {
public:
    WrapperF(const Vector3dF &src): vec(src) {}
    virtual double Len() const {return vec.Len();}
private:
    Vector3dF vec;
};
 
class WrapperD: public Vector3d {
public:
    WrapperD(const Vector3dD &src): vec(src) {}
    virtual double Len() const {return vec.Len();}
private:
    Vector3dD vec;
};
 
double NegLen(const Vector3d& vec)
{
    return -vec.Len();
}
 
Vector3dF vf(1.2f, 1.4f, 1.6f);
const double nl = NegLen(WrapperF(vf));
PlayerDark
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 62
05.12.2009, 14:30  [ТС]     Совместимость типов #6
Насчет первого случая, я так понимаю при передачи вектора в функцию, принимающую векторы другого типа, будет создан экземпляр нужного вектора и после использования сразу удален ?
Yandex
Объявления
05.12.2009, 14:30     Совместимость типов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru