Создание сквозного интерфейса для библиотеки - PullRequest
0 голосов
/ 27 мая 2011

Извините, если этот вопрос был задан ранее. Я действительно не уверен, как его искать.

То, что я пытаюсь сделать, - это создать библиотеку функций для себя, чтобы облегчить жизнь в моей будущей школьной работе. Я создал набор функций, которые обрабатывают объекты, основанные на геометрии, такие как трехмерные векторы, точки и плоскости, а также все связанные с ними методы (точка, крест, масштаб).

Посредством некоторого поиска, я нашел Eigen-библиотеку , которая реализует все, что я хочу, включая множество SSE-компонентов, чтобы сделать это быстро.

Я не понимаю SSE и многое из того, что они делали в этой библиотеке, поэтому я не хочу использовать его в качестве своей библиотеки разработки. Под этим я подразумеваю то, что я хочу кодировать все, используя мои тупые, медленные версии, которые я знаю, как они работают, чтобы я мог убедиться, что я все делаю правильно. Затем, когда я уверен, что математика работает правильно, я бы хотел переключить ее на использование библиотеки Eigen для повышения эффективности.

Есть ли какой-нибудь способ сделать это так, чтобы я мог установить флаг или передать переменную (может быть, что-то из шаблонов?), Чтобы я мог переключать свой код с моих вещей на вещи Eigen без необходимости переписывать мои приложения?

По сути, я хотел бы сделать стандартный интерфейс между двумя библиотеками.

Код библиотеки Eigen будет включен в тот же каталог. У меня был бы Geometry.h, а затем папка Eigen, содержащая всю эту библиотеку.

Я не знаю, как преодолеть пропасть между ними. Нужно ли мне писать методы-обертки для всех их вещей, чтобы у них был общий API?

РЕДАКТИРОВАТЬ ::
Я также должен добавить, что хотел бы, чтобы это было как можно быстрее. Для таких вещей, как точечные, перекрестные и матричные функции, которые можно вызывать много раз, я бы не хотел проходить через виртуальные функции или слишком сложные методы-обертки, которые могли бы негативно повлиять на производительность.

Я слишком много спрашиваю?

END EDIT

Что-то вроде этого - то, что я хочу в действительности. Но я уверен, что это не то, что я хочу.


#ifdef BASIC_LIBRARY
  class Vector3
  {
    float x,y,z;
    float dot(Vector3);
  }
#endif
#ifdef EIGEN_LIBRARY
  //some sort of passthrough to eigen library
#endif

1 Ответ

1 голос
/ 27 мая 2011

Я бы предложил использовать для этого пространства имен:

namespace geometry {
    class Vector3 {
       ...
    };
}

namespace eigen {
    using geometry::Vector3;

    ...
}

По сути, это позволит вам определить основные типы геометрии и операции, а затем использовать выбранные части непосредственно из другого пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...