1 | ||||||||||||||||
Как можно переопределить <обобщенный аргумент> в обобщенном классе01.09.2012, 01:07. Показов 2764. Ответов 32
Метки нет (Все метки)
допустим есть что то простое
print.hpp
print.cpp
main.cpp
Хочется что бы можно было бы в зависимости от ситуации менять Print< тип данных вот тут > p ; Как это можно сделать попробовал вот так //Print< get_type(bb)> p ; типа не хочет компелироваться вообще возможно ли это ???
0
|
01.09.2012, 01:07 | |
Ответы с готовыми решениями:
32
Как можно переопределить <обобщенный аргумент> в обобщенном классе используя BOOST Как использовать обобщенный метод в не-обобщенном классе? Как суммировать переменные Т в обобщенном классе? Можно ли переопределить функцию-член в унаследованном классе, не объявляя её виртуальной в родительском? |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
01.09.2012, 01:16 | 2 |
Leeto, Нет. Тип - должен быть известен на этапе компиляции.
1
|
castaway
|
01.09.2012, 01:50
#3
|
Не по теме: Leeto, нет никакого смысла включать в заголовочный файл print.hpp код print.cpp.
1
|
01.09.2012, 01:55 [ТС] | 4 | ||||||||||
если ты имеешь ввиду вот этот кусок иклюд гейтов
это типплейт Добавлено через 1 минуту спасибо я решил тупо все сразу всключь а ля
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
01.09.2012, 02:32 | 6 |
lazybiz, Есть. Релизация шаблонных функций должна быть видима. Следовательно можно написать реализацию либо в хедере, либо в другой файле (расширение не имеет значение, хотя .cpp использовать явно не стоит) и иклудить его в файл с объявлением.
1
|
01.09.2012, 02:45 | 8 |
Так она и так видима. Никто её не скрывает в данном случае.
Я бы сказал что это является хорошим тоном, когда ты описываешь прототипы функций и определения классов в заголовочных файлах (с шаблонами или без). И все-таки не вижу в этом никакого смысла.
1
|
01.09.2012, 05:40 | 9 |
Шаблоны инстанцируются на этапе компиляции, а значит, реализации шаблонных функций должны быть известны на этапе компиляции, иначе вылетит ошибка линковщика(undefined reference).
1
|
01.09.2012, 12:56 | 10 | |||||||||||||||
soon, все абсолютно то же самое. Переделал только то о чем говорил.
print.hpp
print.cpp
main.cpp
Нет никакой ошибки линковщика.
1
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
01.09.2012, 13:09 | 11 |
Вы попробуйте создать две специализации шаблона... Добавьте Print< double > к примеру.
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
01.09.2012, 13:11 | 12 |
(Опять читать разучился.)
0
|
01.09.2012, 13:18 | 13 | |||||
Toshkarik, добавить куда? В класс A тот что в
main.cpp
~OhMyGodSoLong~, то что в этой программе нет никакого смысла в заголовочный файл включать cpp.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
01.09.2012, 13:19 | 14 | |||||
Да вот хотябы, просто поменяйте main.cpp на
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||||||||||||
01.09.2012, 13:29 | 16 | |||||||||||||||
Я уже понял, я не понял, что это про инклюд, а не про какую-то хитродинамику :)
Не знаю, как у вас, но у меня линкер вполне себе ругается на вот это
foo.h
вот так
Код
c:\Tmp\d>g++ main.cpp foo.cpp C:\Users\---------\AppData\Local\Temp\cckjhS0M.o:main.cpp:(.text+0x26): undefined reference to `Foo<int>::Foo(int const&)' C:\Users\---------\AppData\Local\Temp\cckjhS0M.o:main.cpp:(.text+0x32): undefined reference to `Foo<int>::get() const' collect2: ld returned 1 exit status
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
01.09.2012, 13:33 | 18 |
lazybiz, так про это и говорили, в частности ForEveR, что просто не удачно выбрано расширение файла.
0
|
01.09.2012, 13:37 | 19 |
Toshkarik, если ты посмотришь на файлы print.hpp и print.cpp из первого поста то поймешь, что расширение то как раз он выбрал правильное. В print.hpp описание класса. В print.cpp его реализация.
Если бы было не так, я бы не стал ничего говорить.
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
01.09.2012, 13:42 | 20 |
Там реализация шаблонного класса. Правильней было бы назвать как то так Print_Implementation.hpp
0
|
01.09.2012, 13:42 | |
01.09.2012, 13:42 | |
Помогаю со студенческими работами здесь
20
Как переопределить функцию func2 в классе B Перегрузка операторов в обобщенном классе Как переопределить перегруженную функцию в производном классе? Как в классе-перехватчике переопределить событие с аргументами? Конфликт двух типов в обобщённом классе Как переопределить существующее свойство компонента в классе-перехватчике? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |