| 
							spiage
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 «  : 27-08-2004 03:41 »   | 
								
								 | 
							  
							 
							Пример кода: typedef void (*MyFunc)(int); vector<MyFunc *> o; void Registrate(MyFunc m) {    o.push_back(m); }; class MyClass { public:    int d;    void AFunc(int i) { d = i * i; };    MyClass() {       Registrate((MyFunc)(&AFunc)); // что написать тут????????       // постоянно выдает ошибку :(    }; };
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 30-11-2007 23:31 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							spiage
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 27-08-2004 04:07 »   | 
								
								 | 
							  
							 
							Урра!!! MSDN - rulezzz В общем делается это так: class MyClass; // Предварительно говорим, что сделаем такой класс typedef void (MyClass::*MyFunc)(int); // Начало магии vector<MyFunc *> o;  void Registrate(MyFunc m) {    o.push_back(m);  };  class MyClass { public:     int d;     void AFunc(int i) { d = i * i; };     MyClass() {       Registrate(&MyClass::AFunc); // и второй кусочек заклинания    };  }; 
  Все работает как надо, вот ссылка на главу: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/c2276.asp 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 30-11-2007 23:33 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 27-08-2004 05:52 »   | 
								
								 | 
							  
							 
							иэх... вот что значит отсутствие поиска на форуме    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serega
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 27-08-2004 05:58 »   | 
								
								 | 
							  
							 
							Почему отсутствие ? А кнопочка сверху для понта чтоли ?    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							spiage
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 27-08-2004 06:47 »   | 
								
								 | 
							  
							 
							dimka, Serega,  Если вы про то, что нечто подобное уже кто-то спрашивал, то не были ли столь любезны дать ссылку, т.к. поиск по форуму ничего не дал? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serega
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 27-08-2004 09:59 »   | 
								
								 | 
							  
							 
							Я про то, что поиск всетаки есть spiage, а ты про что ? Код, что ты привел во втором посте это то что нужно или нет ? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 27-08-2004 10:25 »   | 
								
								 | 
							  
							 
							spiage, я то точно знаю... я сам этим вопросом задался месяц назад, только это было в соседнем форуме (который для ОС). А кнопочка сверху - это так... для понта, а не поиск. Я вот тоже сейчас поискал ради любопытства по строчке "функция член класс метод". Поиск по отдельным словам вываливает половину форума, а поиск по всем словам ничего не даёт. а тема была эта  https://forum.shelek.ru/index.php/topic,3979.0.html&highlight=и сейчас я её найти смог лишь по автору и зная форум    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							spiage
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 27-08-2004 10:25 »   | 
								
								 | 
							  
							 
							Я пор то, что сначала поиском воспользовался по форуму, прежде чем спрашивать   А тот код, который я привел - работает на половину... Точнее указатель действительно так можно получить, но вот работать потом с ним у меня так и не получилось... Ни один из компиляторов не смог разименовать указатель...   Пришлось делать friend функцию   Так что если кто-нить знает, как заставить работать для разименования указателя - милости прошу рассказать  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Dimka
							
								Деятель 
								Команда клуба
								
								 
								  Offline
								Пол:   
								
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 27-08-2004 10:27 »   | 
								
								 | 
							  
							 
							spiage, можно - сегодня я в качестве поиска поработаю, а не дивижок этого форума. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел) 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 27-08-2004 11:18 »   | 
								
								 | 
							  
							 
							spiage, вот зачем тебе только указатель на функцию класса модет тебе оно и не надо. Опять же функторы есть. Или ще так как делается при работе с STL когда требуется сделать полиморфный функтор для этого делается функтор-оболочка содержащий указатель на класс реализацию. Хотя для передачи обычно хватает &Class::Func или так mem_fun(&Class::Func) или так mem_fun_ref(&Class::Func) Или я чего не понял?  :? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serega
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 27-08-2004 11:47 »   | 
								
								 | 
							  
							 
							Вот пример того, как можно сделать, если что непонятно почитай  паттерн Command и задавай вопросы #include <iostream> #include <string> #include <vector>
  using namespace std;
  class Command { public: 	virtual void DoSomething(int) = 0; };
  template <class Type> class CallMemberCommand : public Command { 	typedef void (Type::*MemberType)(int);
  	Type* object; 	MemberType member;
  public: 	CallMemberCommand(Type* obj, MemberType func)  	: object(obj), member(func)  	{}
  	void DoSomething(int i) 	{ 		(obj->*member)(i); 	} };
  class TestClass { 	string name;
  public: 	TestClass(char* n) : name(n) 	{}
  	Command* GetTestCommand() 	{ 		return new CallMemberCommand<TestClass>(this, TestFunction); 	}
  	void TestFunction(int i) 	{ 		cout << "TestClass(" << name.c_str() << ")::TestFunction, given value = " << i << endl; 	} };
 
  void main() { 	typedef vector<Command*> commands_container; 	commands_container commands;
  	TestClass t1("test1"), t2("test2"), t3("test3");
  	commands.push_back(t1.GetTestCommand()); 	commands.push_back(t3.GetTestCommand()); 	commands.push_back(t2.GetTestCommand());
  	commands_container::iterator begin = commands.begin(); 	for(; begin != commands.end(); ++begin) 	{ 		(*begin)->DoSomething(123); 	} } Конечно это не хорошо хранить указатели в векторе, но это я думаю ты исправить сможешь  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 30-11-2007 23:37 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							lapulya
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 31-08-2004 21:28 »   | 
								
								 | 
							  
							 
							Ну ты серега даааал..... Человек у тебя спрашивает почему ЭТО   class MyClass; // Предварительно говорим, что сделаем такой класс  typedef void (MyClass::*MyFunc)(int); // Начало магии  vector<MyFunc *> o;  void Registrate(MyFunc m) {     o.push_back(m);  };  class MyClass {  public:     int d;     void AFunc(int i) { d = i * i; };     MyClass() {        Registrate(&MyClass::AFunc); // и второй кусочек заклинания     };  };
 
 не работает.... а ты ему такой пример!!!  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением Lapulya 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serega
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 01-09-2004 06:29 »   | 
								
								 | 
							  
							 
							Ну ты серега даааал..... Человек у тебя спрашивает почему ЭТО  ... не работает.... а ты ему такой пример!!! Не работает потому что this-функцию нельзя вызвать без указателя на обьект Значит надо хранить указатель на функцию вместе с указателем на обьект Что бы скрыть это от клиента (ему явно не интересно это знать) удобно использовать паттерн команда Вот собственно и все  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							lapulya
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 01-09-2004 17:37 »   | 
								
								 | 
							  
							 
							то Serega  да я то понял, вот только если человек не понимает почему его код не работает (а надо признать, что это достаточно простая вещь), то рекомендовать ему такое мощнейшее и достаточно сложное решение (загрузив его по самые гланды) думаю не лучшее решение, я это к тому написал что думаю, что твой совет слииииишком сложный для автора темы (НО могу и ошибатся..... ни кого обидеть не хотел :oops: ) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							С уважением Lapulya 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serega
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 01-09-2004 18:34 »   | 
								
								 | 
							  
							 
							На основании чего ты судишь о знаниях spiage ? с stl он вроде знаком, к тому же я ничего кроме string и vector в примере и не использую что такое интерфейс, наследование и полиморфизм не должно вызывать вопросов (в противном случае стоит для начала изучить ООП) что такое указатель на функцию он тоже знает а больше ничего и нету 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serega
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									«  Ответ #15 : 01-09-2004 18:38 »    | 
								
								 | 
							  
							 
							to  spiage, ты ответь что-нить, а то мы уже флудить начали, а это не к добру    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |