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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поле структуры - указатель на функцию, как объявить 
:(
    Опции темы
Step
Дата 21.4.2005, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 25



как объявить указатель на функцию в структуре
Добавлено @ 13:57
да бы потом вызвать можно было

подозреваю что надо вот так

тип * имя(аргументы)

имя=@originalname;


а вызывать вот так

имя(аргументы)


правильно или нет, а то я сейчас проверить не могу, а когда смогу инета не будет






--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
chaos
Дата 21.4.2005, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



вот тебе примерчик не большой! Те это надо?
Код

#include <stdio.h>

struct test
{
    void(*func)(void);    
};


void print(void)
{
    printf("Hello world\n");
}

void main()
{
    test st;
    st.func = &print;
    st.func();
}

PM WWW   Вверх
Step
Дата 21.4.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 25



chaos, сенкс


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Step
Дата 21.4.2005, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 25



chaos, а если принт пренадлежит другой структуре(классу)


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Step
Дата 21.4.2005, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 25



Код

class S_XmlRpc
{
public:
    CString postdate;
    CMemFile answer;
    CString param;
    S_XmlRpc(CString a_funcName);    
    ~S_XmlRpc(void);
    int AddStructR(void);
    int AddSMemberStr(CString name , CString value);
    int AddSMemberInt(CString name, int value);
    int AddSMemberBool(CString name, bool value);
    int InserParams(void);
    int InsertMembers(void);
    int ( *Resolver)(CMemFile &file);
    bool CheckData(void);
};





Код

class FunctionTool
{
public:
    FunctionTool(void);
    ~FunctionTool(void);
    int TestResolve(CMemFile &file);
};



адет ошибку __сdecl преобразование
Код

S_XmlRpc req;
FunctionTool F_tool;
req.Resolver=&(FunctionTool.F_tool)




--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Vyacheslav
Дата 21.4.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 9
Всего: 59



Указать адрес на метод класса и хранить в струтуре еще указатель на объект того класса, которому принадлежит метод
Код

class FunctionTool;
class S_XmlRpc
{
public:
       int (FunctionTool::*Resolver)(CMemFile &file);
       FunctionTool* ft
  };


S_XmlRpc rpc;

(rpc.ft->*rpc.Resolver)(file);






--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Step
Дата 22.4.2005, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 25



Vyacheslav, не могу врубиться что это мне даст


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



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Vyacheslav
Дата 22.4.2005, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 9
Всего: 59



А я понятие не имею, для чего это тебе нужно. Ты спросил, я ответил. Будешь ты это использовать или нет это твое дело. Существует непреложный факт, что метод класса нельзя вызвать без объекта этого класса, если метод не статический. Вот и все. Отсюда и вывод: Хочешь вызвать метод класса по адресу, позаботься еще о хранении адреса объекта этого класса
Добавлено @ 09:11
Другие варианты
1)использовать статический метод класса (но это равносильно использованию обычной функции
2)использовать темплате библиотеки( boost, loki) или самому написать соответсвующую обертку
3) перейти на платформу нет и использовать делегаты
4) использовать С++Builder и __closure


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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