Russian Qt Forum
Ноябрь 25, 2024, 02:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: какой тип переменной надо использовать.  (Прочитано 5269 раз)
slava_d200
Гость
« : Октябрь 12, 2012, 22:58 »

какой тип переменной надо использовать чтобы
переменная могла принимать адрес QString, int и т.д.

Пробывал QVariant - это вроде не тот вариант
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Октябрь 12, 2012, 23:29 »

QVariant принимает значения, а не адреса. если адрес, то можно попробовать через void *
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
slava_d200
Гость
« Ответ #2 : Октябрь 12, 2012, 23:39 »

QVariant принимает значения, а не адреса. если адрес, то можно попробовать через void *


и есть ли возможность в данном варианте определить на какой тип ссылается эта ссылка ?
« Последнее редактирование: Октябрь 12, 2012, 23:48 от slava_d200 » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Октябрь 12, 2012, 23:49 »

По void* никакой информации узнать нельзя.

Код
C++ (Qt)
void* ptr = 0;
QString* s = reinterpret_cast<QString*>(ptr);
 
Записан

Гугль в помощь
slava_d200
Гость
« Ответ #4 : Октябрь 12, 2012, 23:53 »

понял
СПАСИБО.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Октябрь 13, 2012, 00:03 »

Большинство кутэшных классов шарят свое тело. Поэтому я бы всё-таки использовал QVariant и передавал по значению.
Записан

Гугль в помощь
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Октябрь 13, 2012, 03:13 »

можно попробовать что-то такое если нужны именно указатели:
Код
C++ (Qt)
enum VariableType
{
   Int,
   Long,
   String,
   ...
};
 
struct VariableData
{
   VariableType type;
   void *data;
};
ну и дальше через свич раскручивать
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Октябрь 13, 2012, 09:49 »

Или без reinterpret
Код
C++ (Qt)
struct CVarPtr
{
   int mTypeID;
   union {
     int * mInt;
     QString * mStr;
   };
};
 
Записан
andrew.k
Гость
« Ответ #8 : Октябрь 13, 2012, 18:39 »

Или без reinterpret
Код
C++ (Qt)
struct CVarPtr
{
   int mTypeID;
   union {
     int * mInt;
     QString * mStr;
   };
};
 
Эта конструкция называется "обмани всех и себя в том числе")
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Октябрь 13, 2012, 19:24 »

Эта конструкция называется "обмани всех и себя в том числе")
Откуда такая разрушительная критика? Улыбающийся union просто "не в моде" - но это прекрасная штатная конструкция
Записан
andrew.k
Гость
« Ответ #10 : Октябрь 13, 2012, 20:07 »

Эта конструкция называется "обмани всех и себя в том числе")
Откуда такая разрушительная критика? Улыбающийся union просто "не в моде" - но это прекрасная штатная конструкция
У union совершенно другое назначение, не для "безболезненного" приведения указателей.
"прекрасная" это очень громко сказано.
Эта конструкция примерно уровня goto - использовать можно, но крайне редко и уж точно не с указателями.
А да. Ответ на вопрос "откуда критика": это мое имхо.
« Последнее редактирование: Октябрь 13, 2012, 20:09 от andrew.k » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Октябрь 13, 2012, 20:37 »

У union совершенно другое назначение, не для "безболезненного" приведения указателей.
"прекрасная" это очень громко сказано.
Эта конструкция примерно уровня goto - использовать можно, но крайне редко и уж точно не с указателями.
А да. Ответ на вопрос "откуда критика": это мое имхо.
А не предвзято ли это имхо? Ну вот хотя бы данный случай - чем union плох? Я так вижу что он ничем не хуже, а наоборот, лучше того reinterpret_cast, который здесь придется писать ой много раз. Или плюсовый каст - это типа "показатель крутизны"? Ну из этих "коротких штанишек" наверное все уже повырастали Улыбающийся Обоснуйте Ваше мнение, приведите пример(ы) - а пока видны только довольно категорические утверждения, основанные непонятно на чем.
Записан
andrew.k
Гость
« Ответ #12 : Октябрь 13, 2012, 21:15 »

У union совершенно другое назначение, не для "безболезненного" приведения указателей.
"прекрасная" это очень громко сказано.
Эта конструкция примерно уровня goto - использовать можно, но крайне редко и уж точно не с указателями.
А да. Ответ на вопрос "откуда критика": это мое имхо.
А не предвзято ли это имхо? Ну вот хотя бы данный случай - чем union плох? Я так вижу что он ничем не хуже, а наоборот, лучше того reinterpret_cast, который здесь придется писать ой много раз. Или плюсовый каст - это типа "показатель крутизны"? Ну из этих "коротких штанишек" наверное все уже повырастали Улыбающийся Обоснуйте Ваше мнение, приведите пример(ы) - а пока видны только довольно категорические утверждения, основанные непонятно на чем.
По поводу reinterpret_cast уже была отдельная тема. Зачем повторяться?
Union с указателями это синтаксический обман. Фактически это сишное приведение типа. При том, что синтаксически его даже нет.
Union нужно использовать для данных, а не для указателей.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.115 секунд. Запросов: 23.