Экспорт класса унаследованного от шаблона. Ошибка!?
От: samadhi  
Дата: 06.12.05 17:36
Оценка:
Есть шаблонный класс допустим по работе с матрицами, реализующий основные
операции над матрицей. Экспортировать пытаюсь через __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.
В и-нете натолкнулся на похожий вопрос, а вот ответов не нашёл.
Re: Экспорт класса унаследованного от шаблона. Ошибка!?
От: VoidEx  
Дата: 06.12.05 22:04
Оценка:
Здравствуйте, samadhi, Вы писали:

S>Есть шаблонный класс допустим по работе с матрицами, реализующий основные

S>операции над матрицей. Экспортировать пытаюсь через __declspec(dllexport). При
S>подстановке любого типа у которого не определены операторы, скажем, умножения
S>компилятор говорит мне об этом. Хотя я нигде не пытаюсь этот тип перемножать.
S>Если убрать __decl..., то всё оки — он начинает себя вести как хорошо воспитанный
S>шаблон, т.е. компилить только то что я использую.

Логично Чтобы вынести функции в длл, ему надо их скомпилить, вот и ругается.
Re[2]: Экспорт класса унаследованного от шаблона. Ошибка!?
От: samadhi  
Дата: 07.12.05 09:10
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Логично Чтобы вынести функции в длл, ему надо их скомпилить, вот и ругается.


Дык, я же их не использую :-Р
В этом же и прелесть шаблона — компилиться то, что используешь.
Или я чё-то недопонимаю?
Re[3]: Экспорт класса унаследованного от шаблона. Ошибка!?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 08.12.05 02:16
Оценка:
Здравствуйте, samadhi, Вы писали:

S>Здравствуйте, VoidEx, Вы писали:


VE>>Логично Чтобы вынести функции в длл, ему надо их скомпилить, вот и ругается.


S>Дык, я же их не использую :-Р

S>В этом же и прелесть шаблона — компилиться то, что используешь.
S>Или я чё-то недопонимаю?

Ты их используешь. Неявно. Твоя Dll их экспортирует. В таблице экспорта должны быть адреса функций. Как их получить без скомпилированных функций?
Маньяк Робокряк колесит по городу
Re[4]: Экспорт класса унаследованного от шаблона. Ошибка!?
От: samadhi  
Дата: 08.12.05 17:37
Оценка:
Здравствуйте, Marty, Вы писали:

M>Ты их используешь. Неявно. Твоя Dll их экспортирует. В таблице экспорта должны быть адреса функций.


Ага! Ясенно. Пасиб. А можно как-нить через __declspec или def-файл экспортировать
функции только дочернего класса или нужные методы шаблона (тут, я полагаю, __declspec не пройдёт,
т.к. шаблоны не экспортятся).

Кажется, проще разбить шаблон на части: базовый и с мат. операторами

Пасибки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.