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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,421
#1

Как в конструкторе класса передать параметром указатель на функцию? - C++

25.07.2011, 20:59. Просмотров 2046. Ответов 5
Метки нет (Все метки)

Друзья! Вот тут всё понятно, есть класс, в котором приватная функция f_0, в конструкторе
передаётся указатель на функцию f_1. Эта функция (f_0 или f_1, у них одинаковые прототипы) будет использоваться в классе в дальнейшем, но мне её надо как-то в класс передать. Вот, передаю, не передаётся


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <typename T>
class klass {
 public:
  //Вот тут присваивание
  klass(void(*f)()){f_0= f;};
 private:
  void f_0 () {};
};
 
 
//Определение функции
template <class T>
void f_1 () {}
 
 
int main() {
 //А тут ругань
 klass<int> ob (f_1<int>);
 return 0;
}
То есть я хочу сделать аналог как бы, допустим, предикату. Вот например как здесь:
http://www.cplusplus.com/reference/algorithm/find_if/

Ну и сразу же, если вместо конструктора использовать обычную функцию (то есть без классов вообще), то всё передаётся хорошо:
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
#include <windows.h>
#include <stdio.h>
 
 
template <class T>
int osnovnaya_funktsia () {
 printf ("привет, дуралеи!\n"); 
}
 
 
int prosto_funktsia (int(*f)()){
 int(*f_)();
 f_= f;
 printf ("____привет, дуралеи!\n"); 
 f_();
};
 
 
int main () {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 prosto_funktsia (osnovnaya_funktsia<int>);
 getchar ();
 return 0;
}
спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2011, 20:59     Как в конструкторе класса передать параметром указатель на функцию?
Посмотрите здесь:

Как передать указатель на функцию через метод класса ? - C++
typedef void (*FuncCallback)(float* flValue); Пробовал по всякому и ни как: Class.CallFunc // error C3867: CClass::CallFunc :...

Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса? - C++
Ну то есть так: есть родительский и дочерний класс, в родительском определен виртуальная функция и вызывается в его конструкторе (камень...

Указатель на this в конструкторе класса - C++
Добрый день! Есть некий синтетический пример: #include &lt;iostream&gt; #include &lt;memory&gt; class B; class A

Указатель на функцию (как передать?) - C++
void abc(int a, int b) { } void func(void *f(int, int)) { f; }

Как передать указатель на файл в функцию? - C++
Здравствуй по ходу написания программы столкнулся с вопросом как передать указатель на тип файл в функцию. напишите код. ...

Как передать указатель на структуру в функцию - C++
Подскажите как передать указатель *arr на структуру в функцию2, чтобы в ней использовать уже заполненные массивы: void func1() ...

Как в функцию передать указатель на матрицу? - C++
Че то я немного туплю, давно с функциями не работал, мне нужно реализовать функцию которая бы работала и изменяла элементы матрицы...

Как передать в метод класса Menu указатель на метод дочернего класса? - C++
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

Как передать в функцию в качестве параметров указатель на файл - C++
В общем есть функция (Copy_System_Files_To_New_System_Files), которая должна делать 4 раза одно и тоже действие, только с разными...

Как правильно передать в функцию указатель на двумерный массив? - C++
Сабж #include &lt;windows.h&gt; #include &lt;stdio.h&gt; using namespace std; //ОТ безысходности сделал матрицу глобальной int A = {2,...

Как передать функции указатель на функцию в качестве аргумента? - C++
как передать функции указатель на функцию в качестве аргумента?

Можно ли передать указатель на функцию как параметр другой функции? - C++
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.07.2011, 21:12     Как в конструкторе класса передать параметром указатель на функцию? #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template< class T >
class Class {
public:
    Class(void(*f)())
    {
        f_0 = f;
    }
private:
  void (*f_0)();
};
 
template< typename T >
void f_1 ()
{
}
 
int main() 
{
    Class< int > ob(f_1< int >);
    return 0;
}
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
25.07.2011, 21:12     Как в конструкторе класса передать параметром указатель на функцию? #3
kravam, и как ты свой "class Matrix" написал
Возможно я не понял, что ты хочешь, но правильно будет так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename T>
class klass {
 public:
  //Вот тут присваивание
  klass(void(*f)()){f_0= f;};
 private:
  void (*f_0) ();//это должен быть указатель на функцию
};
 
 
//Определение функции
template <class T>
void f_1 () {}
 
 
int main() {
 klass<int> ob (f_1<int>);
 return 0;
}
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,421
25.07.2011, 21:22  [ТС]     Как в конструкторе класса передать параметром указатель на функцию? #4
Чё-то я невнимательным стал, мало сплю потому что. А написал я его с помощью моих друзей с этого форума.
Kastaneda
Форумчанин
Эксперт С++
4479 / 2841 / 227
Регистрация: 12.12.2009
Сообщений: 7,224
Записей в блоге: 1
Завершенные тесты: 1
26.07.2011, 08:14     Как в конструкторе класса передать параметром указатель на функцию? #5
Еще вот что: использовать указатели на ф-ции уже не кошерно, у нас теперь есть такая удобная вещь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<functional>
 
template <typename T>
class klass {
 public:
  klass(std::function<void()>f){f_0= f;};
// private:
  std::function<void()> f_0;
};
 
 
template <class T>
void f_1 () {
    std::cout<<"Hello\n";
}
 
 
int main() {
 klass<int> ob (f_1<int>);
 ob.f_0();
 return 0;
}
если в твоем компиляторе это не будет работать, попробуй добавить пространство имен rt1, т.е. std::rt1::function<void()> , если и так непойдет, значит стоит задуматься о переходе на более новый компилятор
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
26.07.2011, 09:11     Как в конструкторе класса передать параметром указатель на функцию? #6
Или бустЪ
Yandex
Объявления
26.07.2011, 09:11     Как в конструкторе класса передать параметром указатель на функцию?
Ответ Создать тему
Опции темы

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