void f();
};
//A.cpp
template<>
void A<>::f()
{
printf( "g" );
}
//main.cpp
int main()
{
A a;
a.f();
}
Подскажите плиз, что мешает добавить такую возможность в C++? Или может это уже добавлена? Обратите внимание я не про экпорт шаблонов из cpp, а про "почему" нельзя методы класса которые не зависят от T помещать в cpp. Спасибо
Модули это позволяют в любом случае
f зависит от A, а A зависит от шаблонного параметра
но code f не использует никакие элементы от T
Нет, не позволяют
В смысле нет, если да?
Ну и нафига ты его в A добавил?
С модулями точно так же нужно тянуть определения шаблонов в TU где они используются
что в методе f используется из типа T?
Нет, не надо. Модули для того и были придуманы, чтобы позволить разделять интерфейс и реализацию шаблонов
идея сделать class A: public T
Дак ты можешь реализацию шаблона вынести в отдельный dll/lib?
Ну сделай, что мешает?
Мне кажется да. К сожалению, таких исследований не проводил. Точнее, реализация на данный момент это не позволила
все методы A станут "публичными" то есть в header хотя они не используют T
Вынеси эти методы в A_base
Но файл реализации и интерфейс модуля не зависят от друг друга. Если поменять одно, второе перекомпилировать не надо
Тогда если A методы используют атрибуты и методы в базовом, то получится сложная конструкция (привет виртуальное наследование) но я на физическом уровне хочу понять что мешает разрешить С++ такую семантику (по мимо так нельзя)
Не будет там никакого виртуального наследования
class B; class C: public B; class A_base{ void f(){ B:f();}} class A: pubic T(T=C), public A_base
посмотри внимательней
Так, давай так. Мы ПОНЯЛИ чего ты хотел. Это пока в С++ НЕВОЗМОЖНО. И давайте этот вопрос ОСТАВИМ.
Здесь не нужно вирт. наследование
Окей, тебе видней.
Обсуждают сегодня