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

Передача указателя функции класса A в класс B - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ абстрактный базовый класс http://www.cyberforum.ru/cpp-beginners/thread161310.html
люди подскажите.есть абстрактный базовый класс можно ли в нем определить конструктор копирования? написал в компиляторе,получается,что можно,но не понимаю почему? если нельзя создавать объект абстрактного класса,то как проходит такое объявление Abk::Abk(const Abk &) ??? Abk-абстрактный базовый класс
C++ Обработка адреса DNS и IP из коммандной строки Имеется ли функция которая исходя из полученного аргумента будет использовать подходяшую функцию? Т.е. если argv == "localhost" то будет использоваться: clientserver.sin_addr.s_addr = inet_addr(argv); а если argv == "127.0.0.1" то: clientserver.sin_addr.s_addr = htons(atoi(argv)); И если нет то каким образом лучше проверить аргумент, по последнему знаку? Т.е. если домейн то последняя будет... http://www.cyberforum.ru/cpp-beginners/thread161305.html
C++ шифрование файлов произвольного типа
возникла проблема при шифровании: txt файлы шифрует нормально но остальные типы(png) не хочет вот код файл SD.h #include <stdio.h> #ifndef __SD #define __SD class SD { public:
Переменная в динамической памяти C++
class SimpleCircle { public: SimpleCircle (); //Basic constructor SimpleCircle (int radius); //Constructor with parameters void SetRadius (int r); //Radius set function void operator++ () {++itsRadius;} int operator++ (int); //Postfix operator int * itsRadius = new int; };
C++ С базовым курсом разобрался, переходим на оконные приложения. http://www.cyberforum.ru/cpp-beginners/thread161238.html
Пол года долбал базовый курс (все о консоли) и считаю что пора перейти на уровень выше. Нашел на майкрософте маленький гайд по созданию оконных приложений. Ниже будет оконное приложение представлено в том гайде которое выводит "Hello world!". Очень прошу помочь разобраться что к чему. В дальнейшем развитии темы выйдет не плохой учебник... // GT_HelloWorldWin32.cpp // compile with:...
C++ самое длинное слово #include <iostream> using namespace std; int main() { char line; int cur = 0, max = 0, index = 0, i; cin >> line; for(i = 0;; i++) { if(line == ' ' || line == '\0') подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
24.08.2010, 21:11     Передача указателя функции класса A в класс B
Ну по идее это задача для функторов.
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
class AbstractFunctor {   // Прототип для вызывалок. Наследуем от него реальные вызывалки.
public:
    virtual void operator () (int) = 0;    // Оператор для вызова
    virtual ~AbstractFunctor() {}
};
 
// Создадим функтор для вызова метода объекта произвольного типа. 
// Разумеется, в его составе должен быть метод с требуемой сигнатурой.
// Нам понадобится и ссылка на сам объект.
template <typename T>
class MethodFunctor: public AbstractFunctor {
public:
    MethodFunctor(T& Host, void (T::*Fun)(int)): host(Host), fun(Fun) {}
    virtual void operator () (int arg) {host.*fun(arg);}
private:
    T& host;
    void (T::*fun)(int);
};
 
// Так библиотечная часть будет использовать функторы 
// (исключительно через интерфейс AbstractFunctor)
void Receiver::Foo(AbstractFunctor &callback)
{
    callback(7);
}
 
// Так пользовательский код будет обращаться к библиотечному,
// передавая ему функтор, вызывающий void MyClass::MyMethod(int)
void bar(Receiver &rcv)
{
    MyClass mcl;
    rcv.Foo(MethodFunctor<MyClass>(mcl, &MyClass::MyMethod));
}
Вот где-то такая фигня, товарищи. Такой подход, конечно, годится при постоянном и небольшом наборе сигнатур вызова. При большем разнообразии надо уже похитрее колдовать с шаблонами, там всё упрётся в основном в количество аргументов.
 
Текущее время: 23:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru