LINUX.ORG.RU

Шаблоны С++ ЧЯДНТ?


0

0

Ну вот есть такое извращенство:

file1.cc(h)
namespace nms1 {
template<class T> class Manager {...};
}

file2.cc(h)
namespace nms2 {
using nms1::Manager;
class Base{
protected:
template<class T> void funct1(...,T*, Manager<T>);
public:
virtual void funct2() {};
};
}

file3.cc(h)
namespace nms3 {
using nms2::Base;
using nms1::Manager;
class Class2 {...};
class Next : public Base {
public:
void funct2()
{
Class2* cl = new Class2();
Managet<Class2> man();
funct1<Class2>(...,cl, man);
}
};
}

Собираем сие как:
g++43 -o obj1.o -c file1.cc
g++43 -o obj2.o -c file2.cc
g++43 -o obj3.o -c file3.cc
g++43 obj1.o obj2.o obj3.o

теперь компиляция проходит а линковка отваливается со скандалами на undefined reference ns2::Base::funct1<ns3::Class2>(...)
при этом в .h файлах определения и объявления классов, реализация в .cc файлах.

Сие фигня вытащена как часть большой проги где подобный каламбур поверте оправдан.

Вопрос: как подружить линкер с сие хренью?

anonymous

Ответ на: комментарий от Reset

В смысле реализация template<class T> void funct1(...) тоже должна быть в .h файле? Там не достаточно только её объявления?

Я правильно понимаю что реализация класса шаблона, а не только его интерфейс, тоже должна быть в заголовке?

anonymous
()
Ответ на: комментарий от anonymous

>Я правильно понимаю что реализация класса шаблона, а не только его интерфейс, тоже должна быть в заголовке?

правильно. либо искать компилятор с полной поддержкой экспорта шаблонов

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

>Я правильно понимаю что реализация класса шаблона, а не только его интерфейс, тоже должна быть в заголовке?

Да, ты понял совершенно правильно. Есть еще экспорт шаблонов, но его подерживает только Comeau.

Vinick ★★
()
Ответ на: комментарий от Vinick

>Есть еще экспорт шаблонов, но его подерживает только Comeau

не только. навскидку ещё Intel (ибо по сути это тот же Comeau C++ Compiler плюс интелловский оптимизатор), а вообще по идее все, кто использует front-end от EDG:

http://www.edg.com/index.php?location=c_frontend

jtootf ★★★★★
()
Ответ на: комментарий от anonymous

>А в самой GCC export не планируют прикурить?

это в рассылке у них надо смотреть, я к разработке GCC отношения не имею. в принципе никто не мешает пойти по стопам автора первой реализации вариадических шаблонов и написать свой proof-of-concept :) другое дело что мало кому это дело по зубам

jtootf ★★★★★
()
Ответ на: комментарий от Legioner

Да по сути экспорт больше проблем приносит, чем решает. Посему реализация его не стоит столько усилий

placement_new ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.