Разработка статической библиотеки в Visual C ++ для эффективного численного расчета

У меня следующая проблема:
Мне нужно разработать статическую библиотеку (* .lib) в Visual C ++ для эффективного численного расчета.
Я начал определять новый класс шаблонов «Матрица» и прочитал, что наилучшая эффективность может быть достигнута с помощью шаблонов выражений.
Но я также прочитал (и я испытал это), что не могу заключить шаблоны выражений в статическую библиотеку, потому что вам нужно явно определить все комбинации.

Так, например, если я хочу сделать в новом проекте:

Matrix<int> M_A, M_B, M_C, M_D;

M_C = M_A + M_B + 2 * M_D;
M_C = 2 * M_B;
M_C = M_A + 2 * M_B;

импортируя мой * .lib файл, я должен istantiate в моих статических библиотеках 3 различных комбинации, чтобы позволить равенства M_C = Expression.

Есть ли метод или «лучшая практика» для упрощения istantiation explixit в статической библиотеке? Или есть альтернатива шаблонам выражений, обеспечивающая такую ​​же эффективность без проблем с экспортом?
Для пояснения мне нужно сохранить возможность компактной записи типа: M_C = M_A + M_B + 2 * M_D;

Спасибо.

Ps.
Я добавлю больше деталей, чтобы лучше объяснить:

Если я создаю свою статическую библиотеку, я могу использовать ее во внешнем проекте, но я должен экспортировать
все шаблоны специализации.
шаблон класса __declspec (dllexport) Matrix;
шаблон класса __declspec (dllexport) Matrix;

и так далее…

Проблема в том, что я должен сделать то же самое со всеми возможными выражениями, чтобы разрешить равенства (например, M_A = M_B + M_C).
Я должен экспортировать что-то вроде этого:
шаблон класса LibraryNameSpace :: Matrix const & __thiscall LibraryNameSpace :: Matrix :: operator =, int> (класс LibraryNameSpace :: myExpression, int>);

Без вложения всего кода в файл lib для меня нет проблем: я могу без проблем использовать свою библиотеку. Проблема связана с вложением шаблонов выражений в статические библиотеки. Мне нужно сделать это, чтобы замаскировать код и не дать конечным пользователям возможности его прочитать.

2

Решение

Это то, что вы, вероятно, не должны развивать себя с нуля, если вы делаете это в образовательных целях.

Посмотри на Блиц ++. Согласно его руководству, он компилируется в статическую библиотеку.

0

Другие решения

Перед разработкой собственной библиотеки линейной алгебры ET вы рассматривали возможность использования существующих?

У вас есть выбор между (без определенного порядка): собственный, полыхать, uBlas а также блиц ++.

Все они являются библиотеками, использующими шаблоны выражений, чтобы избавиться от временных переменных для смешанных матричных / векторных операций, и некоторые из них (Blaze и Eigen) идут на шаг дальше и специализируют шаблоны для конкретных матричных / векторных операций (интеллектуальные шаблоны выражений). Все упомянутые библиотеки разработаны группами (некоторые научные) людей и были отлажены и проверены, и задокументированы в открытых научных публикациях, с использованием вики и т. Д.

Я бы посоветовал рассмотреть вопрос о том, подходит ли здесь повторное наложение колеса из-за сложности темы. Если вы хотите повысить эффективность, самый простой ответ — адаптировать существующую эффективную библиотеку к вашим потребностям.

0

По вопросам рекламы [email protected]