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

Помогите разобраться с шаблонами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ как раскрасить стаистический рисунок? http://www.cyberforum.ru/cpp/thread361148.html
#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> void Box(int x1, int y1, int x2, int y2); int main(void) { int xmax, ymax;
C++ диспечер задач пожалуйста скиньте диспечер задач на с++ или на с# у кого есть, а то вообще времени ни на что не хватает, чтоб еще его делать. http://www.cyberforum.ru/cpp/thread360687.html
C++ Пользователь вводит координаты точки (x,y) определить входит ли данная точка в область или нет.
Пользователь вводит координаты точки (x,y) определить входит ли данная точка в область или нет.
C++ Определить типы элементов массива
Уважаемые знатоки, возможно ли выяснить типы элементов массива заданного структурой? типа: struct { short X,Y; String Kto;} Massiv;
C++ Требуется помощь!Робот-фермер.. http://www.cyberforum.ru/cpp/thread357033.html
Доброго времени суток!Требуется помощь ,я только начинаю учить си ++,поэтому прошу проявить терпение в случае чего:). Значит задача такова: Робот фермер различает размер апельсинов ( большие / маленькие), цвет апельсинов(orange- спелые, orange-green - полуспелые и green- зелёные). Он срезает Н апельсины по следующему алгоритму: 1.Спелые апельсины ( orange) он делит...
C++ Разработка для Windows CE Доброго времени суток! Подскажите пожалуйста, что используется для разработки ПО для Windows CE 6 и выше? Слышал, что VS 2008 содержит что-то вроде эмулятора. Есть ли более ранние версии VS, которые так умеют? Какие дополнительные пакеты для этого нужны? подробнее

Показать сообщение отдельно
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
06.10.2011, 19:28     Помогите разобраться с шаблонами
Если я вас правильно понял, то

Цитата Сообщение от http://www.cplusplus.com/doc/tutorial/templates/
When we declare specializations for a template class, we must also define all its members, even those exactly equal to the generic template class, because there is no "inheritance" of members from the generic template to the specialization.
Так что, только уточнять весь класс. Однако, можно так:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <iomanip>
#include <string>
#include <typeinfo>
 
template <typename T>
class printer
{
protected:
    T obj;
 
public:
    printer( const T &_obj ) : obj( _obj ){};
 
    void print( std::ostream & os )
    {
        os << typeid( *this ).name() << ":\t" << obj << '\n';
    }
};
 
 
class b_printer : public printer <bool>
{
public:
    b_printer( const bool &_obj ) : printer( _obj ){};
 
    void print( std::ostream & os )
    {
        os << typeid( *this ).name() << ":\t" << std::boolalpha << obj << '\n';
    }
};
 
 
int main()
{
    printer< std::string > str_printer( "String data" );
    printer< double > dbl_printer( 248.124 );
    printer< char > char_printer( 'v' );
    printer< bool > bool_1_printer( true );
    b_printer bool_0_printer( false );
 
    str_printer.print( std::cout );
    dbl_printer.print( std::cout );
    char_printer.print( std::cout );
    bool_1_printer.print( std::cout );
    bool_0_printer.print( std::cout );
 
    return 0;
}
Добавлено через 4 минуты
Похоже, лёд тронулся:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <iomanip>
#include <string>
#include <typeinfo>
 
template <typename T>
class printer
{
protected:
    T obj;
 
public:
    printer( const T &_obj ) : obj( _obj ){};
 
    void print( std::ostream & os );
};
 
template <typename T>
void printer<T>::print( std::ostream & os )
{
    os << typeid( *this ).name() << ":\t" << obj << '\n';
}
 
// закомментируйте эту специализацию, чтобы увидеть разницу
template <>
void printer<bool>::print( std::ostream & os )
{
    os << typeid( *this ).name() << ":\t";
 
    if( obj )
       os << "hell yeah!\n";
    else
       os << "no way!\n";
}
 
 
int main()
{
    printer< std::string > str_printer( "String data" );
    printer< double > dbl_printer( 248.124 );
    printer< char > char_printer( 'v' );
    printer< bool > bool_1_printer( true );
    printer< bool > bool_0_printer( false );
 
    str_printer.print( std::cout );
    dbl_printer.print( std::cout );
    char_printer.print( std::cout );
    bool_1_printer.print( std::cout );
    bool_0_printer.print( std::cout );
 
    return 0;
}
 
Текущее время: 16:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru