Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> списки типов 
:(
    Опции темы
MAKCim
Дата 16.1.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



есть интерфейс и множество его реализаций, есть список типов этих реализаций
Код

type_list<R1, type_list<R2, ...>...>

надо по ссылке на интерфейс определить на объект какого класса R1, R2, ...
ссылается данная ссылка
я определил индекс класса в списке типов, однако хотелось бы получить сам тип, что то вроде
Код

typedef ... my_type

если бы индекс определялся статически на этапе компиляции, то было бы просто, а так он вычисляется в run-time, вообще думаю это невозможно

ps. задача надуманная


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
azesmcar
Дата 17.1.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Неважно run-time он выделяется или нет..важно что ссылка то у тебя есть...и ссылка на определенный тип. Пока что не могу конкретно понять что именно тебе надо решить...может есть обходные пути...но в общем случае в С++ есть макрос..может пример тебе поможет..если нет шли часть кода...

Код

#include <cstdio>

#define tpdef(_T, _K) typedef __typeof(_T) _K

int main()
{
    int q = 3;
    tpdef(q, MYINT);
    MYINT t = q;
    printf("%d\n", t);
    return 0;
}


И еще покопайся в функции typeid...может и это поможет, но учти что для typeid тебе нужно будет включить RTTI (Run-Time Type Information)
PM   Вверх
Earnest
Дата 17.1.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Если тип объекта динамический - то он по определению не может быть известен в момент компиляции, на то и RTTI == run-time ...

Однако, если все же по логике задачи тип известен на этапе компиляции (однако незвестен в данном месте твоему коду), то для его получения ссылка на объект тебе никак не поможет. На этом этапе ты можешь работать только с типами (ну еще с константами).



--------------------
...
PM   Вверх
azesmcar
Дата 17.1.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата
Если тип объекта динамический - то он по определению не может быть известен в момент компиляции


Тип может быть известен, ведь указатель на "что-то" обьявлен? Может я чего-то в задаче не понимаю?

ссылка
Код

#include <cstdio>

#define tpdef(_T, _K) typedef __typeof(_T) _K

int main()
{
    int q = 3;
    int &j = q;
    tpdef(j, MYINT);
    MYINT t = q;
    t = 34;
    printf("%d\n", q);
    return 0;
}

указтель
Код

#include <cstdio>

#define tpdef(_T, _K) typedef __typeof(_T) _K

int main()
{
    int *q = new int;
    *q = 4;
    tpdef(q, MYINT);
    MYINT t = new int;
    *t = 5;
    printf("%d\n", *t);
    return 0;
}

Добавлено @ 10:56
Правда в случае с ссылкой мы получаем не тип int& а тип int..
Добавлено @ 11:01
тоже самое с template -ом...

Код

#include <iostream>

#define tpdef(_T, _K) typedef __typeof(_T) _K

template <class TC>
int f(const TC& param)
{
    tpdef(param, PARAMTYPE);
    PARAMTYPE t = param;
    std::cout << t << std::endl;
}

int main()
{
    f<int>(4);
    f<double>(2.9);
    return 0;
}

PM   Вверх
Earnest
Дата 17.1.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



1) __typeof - это не C++, а расширение Microsoft для Managed C

2) ссылка или указатель на что-то может на самом деле указывать на производный класс - в этом смысле я говорила насчет динамического типа - он может отличаться от объявленного статического типа.

MAKCim
Никак не могу понять, в контексте какой задачи (хоть бы и надуманной) возник твой вопрос ?



--------------------
...
PM   Вверх
azesmcar
Дата 17.1.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата

1) __typeof - это не C++, а расширение Microsoft для Managed C


Только не надо к словам придираться...этот код компилировался под unix..Visual Studio у меня отродясь не водилось...несмотря на то что это microsoft extension во всяком случае работает на всех *nix платформах...как и на виндоузе...

Цитата

2) ссылка или указатель на что-то может на самом деле указывать на производный класс - в этом смысле я говорила насчет динамического типа - он может отличаться от объявленного статического типа.


Тут согласен...но я же не вижу полной задачи...есть вопрос, весьма расплывчатый...не видно ни иерархии, ни кода...я же сказал
Цитата
может пример тебе поможет..

и не говорил что это решение smile
PM   Вверх
Earnest
Дата 17.1.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(azesmcar @ 17.1.2006, 15:29 Найти цитируемый пост)

Только не надо к словам придираться...этот код компилировался под unix..

Я и не придираюсь smile , слово нестандартное, вот и все.
Твой unix-компилятор, оказывается, тоже его определяет - надо полагать, иначе, чем MSVC.
А задача - да, непонятная, и автор увял...



--------------------
...
PM   Вверх
MAKCim
Дата 17.1.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Никак не могу понять, в контексте какой задачи (хоть бы и надуманной) возник твой вопрос ?

в процессе чтения Александреску smile


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Earnest
Дата 19.1.2006, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(MAKCim @ 17.1.2006, 18:13 Найти цитируемый пост)

в процессе чтения Александреску

Это-то как раз понятно... smile
Какую задачу ты себе придумал?



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0543 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.