Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Компилятор https://www.cyberforum.ru/ cpp/ thread193991.html
Здравствуйте. Пишу компилятор pas->asm на с++ Может кто-то подскажет генератор конструкцый или что-то подобное: <переменная1>+<переменная2> mov...
C или C++(не холивар) C++
Здравствуйте. Участвую в различных олимпиадах по программированию, пишу обычно на C++, используя все его вкусности в виде STL, ООП, темплэйтов и проч. Накануне в двух задачах не уложился в...
x86 интерпретатор исходный код C++
кто-нибудь слышал про интерпретаторы x86? в инете нарыл только что в qemu, bochs есть встроенные интерпретаторы команд x86 процессора, но пока не докопался до них. Нужно самому написать такой...
C++ Крестики Нолики учу си месяц дали задачу... хелп ми плиз! Игра крестики нолики. Игра в крестики нолики вдется на квадратном поле 3*3. Играют двое. Начинают крестики. каждый из игроков, поочередно, ставит свой... https://www.cyberforum.ru/ cpp/ thread193237.html
C++ Алгоритмы и программы по использованию указателей и динамических структур данных https://www.cyberforum.ru/ cpp/ thread193137.html
Здравствуйте! Помогите, пожалуйста, написать задачу. Вот текст:Дан указатель P0 на один из элементов непустого двусвязного списка. Вывести число N — количество элементов в списке, а также указатели...
Функция rand C++
Решить задачу с использованием библиотечной функции rand,заголовочный файл stdlib.h Случайные числа в диапазоне от -32768 до 32768 можно получить с помощью следуйщей фунции int casual () { ...
C++ callback метода класса
Предыстория: нужно последовательно запускать несколько однотипных циклов большой степени вложенности, в теле которых вызывать разные функции. Т.к. вроде бы переписывать циклы (тем более громоздкие...
C++ кривой Безье написать проектную процедуру создания кривой Безье, Желательно в С++ Добавлено через 17 часов 16 минут помогайте срочно надо(( я не знаю как сделать .... ил дайте ссылку на информацию как ее... https://www.cyberforum.ru/ cpp/ thread192259.html
C++ Выявление такого же ай-пи/мак адреса https://www.cyberforum.ru/ cpp/ thread191681.html
Усем здрасти!) имеется необходимость написать приложение, которое, бы присваивало ip адрес сетевой карте и менять ее мак-адресс. Но самое интересное, что приложение должно извещать пользователя о...
C++ КНИГИ Подскажите харошую(лучшую) книгу по С++ ИЛИ Visual C++ Добавлено через 2 часа 45 минут Посрветуйте https://www.cyberforum.ru/ cpp/ thread191642.html
Делаю внезапно и красиво
Эксперт С++
1310 / 1225 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
17.04.2011, 10:40 0

Использование указателя на метод вместо виртуального метода

17.04.2011, 10:40. Просмотров 5496. Ответов 45
Метки (Все метки)

Ответ

Цитата Сообщение от Evg Посмотреть сообщение
напиши исходник хотя бы схематично, а не на словах объясняй. И, как я уже неоднократно объяснял, сделай это без шаблонов
Я полностью исходник написал уже.) Шаблоны только для уменьшения ручного кодирования, BlackBox работает без шаблонов, т.е. с выносом в библиотеку трудностей не будет.
Я повторю код.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Интерфейс функтора. Ничего не знает о классах A,B и любых других.
class FunctorBase
{ public:
        virtual void Execute() = 0;
};
 
// Никаких шаблонов нету.
void BlackBox( FunctorBase * f )
{
        // Твой код
        // Под конец выполняем функтор
        f->Execute();
}
 
// другой файл/модуль/пофиг
// 
template<class T>
class Functor : public FunctorBase
{
public:
      Functor( T * t )
      : obj(t)
      {}
 
      void Execute()
      {
            obj->func1();
      }
 
       T * obj;
};
 
// Пользовательские классы. Ничего не знают о FunctorBase и Functor  и BlackBox
class A
{
public:
      void func1();
};
class B;
class C
{
public:
         void func1();
         void func2();
};
 
template<>
void Functor<C>::Execute()
{
     obj->func1();
     obj->func2();
}
 
void main()
{
      A a;
      B b;
      C c;
 
      Functor<A> fa(&a);
      Functor<B> fb(&b);
      Functor<C> fc(&c);
 
      BlackBox( &fa );
      BlackBox( &fb );
      BlackBox( &fc );
 
}
Добавлено через 1 минуту
Если в BlackBox передавать по ссылке, то ещё проще код сделать можно.

Добавлено через 2 минуты
Шаблоны используются только в пользовательском коде и можно обойтись без них. Это просто облегчение жизни пользователю. BlackBox шаблоны не использует.

Вернуться к обсуждению:
Использование указателя на метод вместо виртуального метода
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2011, 10:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Переопределение виртуального метода
Нужно написать виртуальный метод в родительском классе , который находит площадь круга. Затем...

переопределение виртуального метода
Существует родитель-класс TEditField = class(TObject) protected procedure...

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

Реализовать перегрузку виртуального метода
В класе class1 реализован открытый виртуальный метод деление двух чисел &quot;a&quot; и &quot;b&quot;. Не внося...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.