Форум программистов, компьютерный форум CyberForum.ru

Как можно переопределить <обобщенный аргумент> в обобщенном классе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Что означают данные http://www.cyberforum.ru/cpp-beginners/thread645180.html
Здравствуйте. подскажите что могут означать данные следующего характера? DWORD poffsets::dw_m_lifestats() {...
C++ Метрики Холстеда Добрый вечер! В качестве индивидуального задания студент произвольно выбирает программу, ко-торую он разработал и отладил (необходимо представить распечатанный листинг) при изучении предыдущих дисциплин цикла «Программное обеспечение» («Программирова-ние», «Системное программирование» и др.). Требуется для представленного программно-го модуля с использованием соотношений определить значения... http://www.cyberforum.ru/cpp-beginners/thread645120.html
C++ Зачем нужен спецификатор private?
Зачем нужен спецификатор private?Если по умолчанию все члены класса являются частными? Class queue { int q; int sloc, rloc; public: void init (); void qput(int i); int qget(); private: ...
C++ Быстрая сортировка
Друзья, здравствуйте! Как работает быстрая сортировка - у меня практически вопросов нет: #include <iostream> #include <stdlib.h> #include <time.h> using namespace std; const int n=10; template <class T> void QuickSort (T Ar, long N) {
C++ Какая IDE лучше ? http://www.cyberforum.ru/cpp-beginners/thread645081.html
Что выбрать: Borland C++ Builder или Visual Studio ?
C++ Библиотека STL, + задача с её использованием Доброго времени суток, о существовании библиотеки шаблонов я узнал 2 недели назад. У меня есть задача: Использовать ООП: Написать программу, которая разгадывает японский кроссворд под названием "Судоку". Пользователь вводит начальные значения уже существующие в кроссворде, который необходимо разгадать, и программа выдает на экран готовый результат. Но это глобальная задача, вопрос проще... подробнее

Показать сообщение отдельно
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
01.09.2012, 14:54     Как можно переопределить <обобщенный аргумент> в обобщенном классе
Цитата Сообщение от lazybiz Посмотреть сообщение
Я не понимаю что вы от меня хотите..
code
print.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
#ifndef Print_HPP
#define Print_HPP
 
template <class T> 
class Print {
public: 
    Print();
    void Print_Object( T& ObjPrint ); 
};
 
#endif
print.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include "print.hpp"
 
using namespace std; 
 
template <class T>
Print<T>::Print()
{
}
 
template <class T>
void Print<T>::Print_Object( T& ObjPrint ) 
{
    cout <<"ObjPrint:" <<  ObjPrint; 
}
main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <sstream>
#include "print.hpp"
 
using namespace std; 
 
class A {
public:
    int x; 
    int y; 
 
    A() {};
    A( int new_x, int new_y ) : x(new_x), y (new_y) {}; 
 
    int calc() {
        return x * y; 
    }
 
    void takethis(const Print <int>& objT ) {}
 
    friend std::ostream& operator << ( std::ostream& out, const A& objA ) {
        return out  << "x: "<<  objA.x<< "y:" <<  objA.y; 
    }
};
 
string get_type( std::string& obj_string )
{
    return obj_string; 
}
int main()
{
    A           aa( 5, 6 );
    Print <int> p;
    aa.takethis( p );
    return 0;
}
out
Bash
1
2
3
4
5
6
7
8
9
soon@desktop:~/Src/C++/test$ make
g++ -c -Wall -O3 --std=gnu++11 print.cpp -o print.o
g++ -c -Wall -O3 --std=gnu++11 main.cpp -o main.o
g++ print.o main.o -lm -o test
main.o: In function `main':
main.cpp:(.text.startup+0x11): undefined reference to `Print<int>::Print()'
collect2: error: ld returned 1 exit status
make: *** [test] Error 1
soon@desktop:~/Src/C++/test$

Да, это будет работать, если добавить в print.cpp
C++
1
template class Print<int>;
Но для этого пришлось залезать в файл реализации шаблонного класса. Считаете это более разумным, чем просто включать реализацию в заголовочный?
 
Текущее время: 14:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru