Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Как работать с параметром типа void
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Как работать с параметром типа void - 16.07.2003, 13:19

может кому-то этот вопрос покажется идиотским, и тем не менее.

я недавно начал работать с С++ и столкнулся с такой проблемой:
необходима функция, в которую могут передаваться параметры разных типов т. е. тип заранее не известен.

some_function(void* some_parametr)
{
//
}

Вопрос! как работать в функции со значением адрес которого хранится в указателе? на асме это реализуется попроще...
Ответить с цитированием
  (#2 (permalink)) Старый
UZZer UZZer вне форума
Member
 
Сообщений: 178
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.01.2003
По умолчанию 16.07.2003, 16:02

На мой взгляляд лучше использовать перерегрузку функций, или ввести в функцию идентификатор типа (дополнительный параметр).
Краем уха слышал об RTTI, посмотри что за звэрь, сам не разбирался
Ответить с цитированием
  (#3 (permalink)) Старый
squirL squirL вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.07.2003
По умолчанию 16.07.2003, 16:39

спасибо. предожение интересное. но перегрузка функций в данном случае не кажется оптимальным решением
Ответить с цитированием
  (#4 (permalink)) Старый
Olesya Olesya вне форума
Member
 
Сообщений: 1,485
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.06.2002
По умолчанию 17.07.2003, 00:21

Ну это отень растяжимый вопрос.
Вопервых надо привести к какому то non void типу и делай что надо.
Ответить с цитированием
  (#5 (permalink)) Старый
UZZer UZZer вне форума
Member
 
Сообщений: 178
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.01.2003
По умолчанию 17.07.2003, 02:45

Olesya, меня наcтаражило:
Цитата:
Originally posted by squirL
[b]необходима функция, в которую могут передаваться параметры разных типов т. е. тип заранее не известен.
Может я чего не понял?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
squirL squirL вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.07.2003
По умолчанию 17.07.2003, 11:12

конкретизирую, коллеги! вот вполне рабочая функция - раскладывает переменную побитно если кто не догадается

void show_bits(char pByte)
{
for (int i=0; i<sizeof(pByte)*8; i++)
{
if((pByte&1)!=0)
{
cout<<1;
}
else
{
cout<<0;
}
pByte=pByte>>1;
}
}

а если написать void show_bits(void *pointer){///} ? и передавать в ф-цию по ситуации - то char, то int, a то и long.
Ответить с цитированием
  (#7 (permalink)) Старый
UZZer UZZer вне форума
Member
 
Сообщений: 178
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 09.01.2003
По умолчанию 17.07.2003, 16:52

По моему сдесь 2 варианра:
- перегрузка
- второй параметр ф-ии с указанием размера принимаемого значения (предпочтительней) (не забудь сделать приведение типа перед выполнением операций!)
Ответить с цитированием
  (#8 (permalink)) Старый
depressman depressman вне форума
Member
 
Сообщений: 112
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.11.2002
По умолчанию 17.07.2003, 21:42

Согласен со вторым предложением UZZer'a. Написать можно например так:
Код:
void show_bits(void *p,int size){
    int i,j;
    char *bp = (char *)p;
    for(i = 0; i < size; i++, bp++)
        for(j = 0; j < 8; j++)
            cout << ((*bp & (1 << j)) >> j);
}
Можно передавать указатели хоть на массивы

ЗЫ Кстати помоему довольно непрактично изменять данные для того чтобы вывести их побитно
Ответить с цитированием
  (#9 (permalink)) Старый
imported_Dmitry_ imported_Dmitry_ вне форума
Member
 
Сообщений: 62
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.07.2003
По умолчанию 23.07.2003, 19:26

А не проще использовать шаблоны фумок?

Код:
// *.h
template <class TYPE> 
void show_bits( TYPE pByte )
{
    int i = 0;    
    
    for( i = 0; i < sizeof( pByte ) * 8; i++ )
    {
  if( ( pByte & 1 ) != 0 )
  {
      cout<<1;
  }
  else
  {
      cout<<0;
  }
  
  pByte >>= 1;
    }
} 

// *.cpp
int main(int argc, char** argv)
{
    int a = 3;
    char b = 'c';
    
    show_bits( a );
    cout<<endl;
    show_bits( b );
    
    return( 0 );    
}
Ответить с цитированием
  (#10 (permalink)) Старый
squirL squirL вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.07.2003
По умолчанию 25.07.2003, 17:50

Dmitry_ - отдельное спасибо.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С сокета данные возвращаются как const void как их просматреть evilbeaver Visual C++ 5 18.03.2011 21:30
INSERT как с этим параметром работать zornig MySQL 10 02.11.2007 18:14
Запуск программы с параметром NooBacuk Delphi 4 07.06.2007 15:18
Функция с параметром типа TImage gleban C++ Builder 6 14.05.2007 15:42
Как избавиться от предупреждения в коде void CMyMainWnd Madrid Visual C++ 20 09.06.2006 15:53
Как понять эту функцию virtual void f() = 0 Madrid С/С++ 18 22.05.2006 12:53
Передача void структуры и её преобразование PhoenixCoder Visual C++ 6 25.07.2005 16:11
Можно ли загрузить адрес void interrupt kas С/С++ 0 31.07.2004 13:56
Что означает void и почему перед set_a пишется void Cryptus С/С++ 3 06.07.2004 17:32
Как правильно произвести перевод из void* в int* Anonymous Visual C++ 3 26.10.2003 14:45
Ошибка конвертирования cannot convert from void to 'char Anonymous Visual C++ 5 01.12.2002 17:32



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов