Есть шаблонный класс допустим по работе с матрицами, реализующий основные
операции над матрицей. Экспортировать пытаюсь через __declspec(dllexport). При
подстановке любого типа у которого не определены операторы, скажем, умножения
компилятор говорит мне об этом. Хотя я нигде не пытаюсь этот тип перемножать.
Если убрать __decl..., то всё оки — он начинает себя вести как хорошо воспитанный
шаблон, т.е. компилить только то что я использую.
Не хочет компилить.
Обидно. Ничего не сделал, только вошёл.
class __declspec(dllexport) CMatrix : public Matrix<CClass>
{
...
};
Я, конечно, нашёл решение, оно мне кажется "наименьшим злом",
но никак не решение проблемы. Но, блин, не красиво это. И почему
он пытается подставить мой тип туда, куда я не просил?
Всё замечательно компилируется и линкуется.
class CCMatrix : public Matrix<CClass>{};
// а вот
// typedef Matrix<CClass> CCMatrix;
// не работает
class __declspec(dllexport) CMatrix : public CCMatrix
{
...
};
В качестве компилятора использую MS VC7.1.
В и-нете натолкнулся на похожий вопрос, а вот ответов не нашёл.
Здравствуйте, samadhi, Вы писали:
S>Есть шаблонный класс допустим по работе с матрицами, реализующий основные
S>операции над матрицей. Экспортировать пытаюсь через __declspec(dllexport). При
S>подстановке любого типа у которого не определены операторы, скажем, умножения
S>компилятор говорит мне об этом. Хотя я нигде не пытаюсь этот тип перемножать.
S>Если убрать __decl..., то всё оки — он начинает себя вести как хорошо воспитанный
S>шаблон, т.е. компилить только то что я использую.
Логично

Чтобы вынести функции в длл, ему надо их скомпилить, вот и ругается.
Здравствуйте, VoidEx, Вы писали:
VE>Логично
Чтобы вынести функции в длл, ему надо их скомпилить, вот и ругается.
Дык, я же их не использую :-Р
В этом же и прелесть шаблона — компилиться то, что используешь.
Или я чё-то недопонимаю?
Здравствуйте, samadhi, Вы писали:
S>Здравствуйте, VoidEx, Вы писали:
VE>>Логично
Чтобы вынести функции в длл, ему надо их скомпилить, вот и ругается.
S>Дык, я же их не использую :-Р
S>В этом же и прелесть шаблона — компилиться то, что используешь.
S>Или я чё-то недопонимаю?
Ты их используешь. Неявно. Твоя Dll их экспортирует. В таблице экспорта должны быть адреса функций. Как их получить без скомпилированных функций?