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

dynamic_cast() шаблон - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
16.04.2013, 18:18     dynamic_cast() шаблон #1
Здорова!
Пытаюсь свой шаблон функции создать dynamic_cast() это ptr_cast() но ничо не получается.
Не могу никак сам шаблон написать вот код:
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
//wablon ptr_cast
#include <iostream>
using std::cout;
using std::endl;
#include <typeinfo>
using std::bad_cast;
 
class A
{
public:
    virtual void print(){}
};
class B : public A {};
class C : public A {};
 
template<class T>
T* ptr_cast(T* ptr)
{
    cout <<"mu v tyt"<<endl; //mu cyuda daje ne popadaem
    /*try
    {
        if(typeid(*ptr)==typeid(T))
            return ptr;
        else
            throw bad_cast();
    }
    catch(bad_cast& e)
    {
        cout <<e.what()<<endl;
    }*/
}
 
int main()
{
    B bb;
    B* bbb=&bb;
    A* ab=bbb;
    
    //B* k=dynamic_cast<B*>(ab); //normal6no vuzuvaetc9
    
    B* c=ptr_cast<B*>(ab);//owibky piwet
    
    
    return 0;
}
А вот ошибка:
./ex15_1.cpp: В функции «int main()»:
./ex15_1.cpp:41:22: ошибка: нет соответствующей функции для вызова «ptr_cast(A*&)»
./ex15_1.cpp:41:22: замечание: candidate is:
./ex15_1.cpp:17:4: замечание: template<class T> T* ptr_cast(T*)


Чо я токо не пробовал методом тыка но ничо не получается, не могу никак подобрать сам шаблон. Help!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2013, 18:18     dynamic_cast() шаблон
Посмотрите здесь:

dynamic_cast C++
dynamic_cast C++
Не много не понятно (dynamic_cast) C++
dynamic_cast C++
C++ Объясните dynamic_cast
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.04.2013, 18:23     dynamic_cast() шаблон #2
Вот так попробуй
C++
1
2
template<class T, class U>
T ptr_cast(U ptr)
кстати вот это
C++
1
2
3
4
5
6
7
8
9
10
11
try
    {
        if(typeid(*ptr)==typeid(T))
            return ptr;
        else
            throw bad_cast();
    }
    catch(bad_cast& e)
    {
        cout <<e.what()<<endl;
    }
очень напоминает бред
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
16.04.2013, 18:25  [ТС]     dynamic_cast() шаблон #3
от когда я просто передаю тип B отак B* c=ptr_cast<B*>(bbb); то нормально вызывается шаблон, а когда через базовый класс пытаюсь вызвать отак B* c=ptr_cast<B*>(ab); то ошибка? Как правильно шаблон написать?

Добавлено через 1 минуту
Kastaneda, Чо бред это профи пишут так . Щас попробую вызвать, но мне нужно с одним наверно параметром шаблон чтобы было как dynamic_cast<один_параметр>();
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.04.2013, 18:34     dynamic_cast() шаблон #4
Цитата Сообщение от ninja2 Посмотреть сообщение
но мне нужно с одним наверно параметром шаблон чтобы было как dynamic_cast<один_параметр>();
можно и так вызывать, можно вообще без параметров, если есть почва для выведения типа. Выведение типов для функций устроено немного по другому, чем для классов.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
16.04.2013, 18:48  [ТС]     dynamic_cast() шаблон #5
Не знаю но нужно я думаю с одним параметром, чтобы было отак B* p=ptr_cast<B*>(ab); и если не соответствие типов то выброс исключения.
Отак короче можно как то сделать?
Ау кто знает?
В dynamic_cast так же сделано с одним параметром.

Добавлено через 1 минуту
мб не через typeid проверять типы, а как то по другому, хотя typeid rtti то по другому скорее всего нельзя ток через него. Значит вся проблема в написании шаблона.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
16.04.2013, 18:51     dynamic_cast() шаблон #6
Цитата Сообщение от ninja2 Посмотреть сообщение
Не знаю но нужно я думаю с одним параметром, чтобы было отак B* p=ptr_cast<B*>(ab);
Так, как я показал выше, можно вызывать твою функцию в таком виде.
Yandex
Объявления
16.04.2013, 18:51     dynamic_cast() шаблон
Ответ Создать тему
Опции темы

Текущее время: 00:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru