LINUX.ORG.RU

получения адреса метода / юзайнье произвольного метода в функции


0

0

собсвенно вопрос - можно ли заюзать в функции произвольный метод из заданного класса в функции, имя метода (ну там ссылку не него) итп передается как параметр функции, ну и в функции также доступен обьект нашего класса. так вот вопрос - возможно ли это, и если да - то как? желательно еше пример.

anonymous

java.lang.reflect (какой вопрос, такой и ответ)

phoenix ★★★★
()

Какой язык?... "...Телепаты в отпуске!..." (с) ЛОР

На C++/Qt делается средствами QMetaObject.

Sectoid ★★★★★
()

вот примерно то что ты хочешь на си :

loader.c :

#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <dlfcn.h>

#define PATH_LENGTH 256
      
int main(int argc, char * argv[])
{
	char path[PATH_LENGTH], * msg = NULL;
	int (*my_entry)();
	void * module;
      
	/* build the pathname for the module */
	getcwd(path, PATH_LENGTH);
	strcat(path, "/");
	strcat(path, argv[1]);
       printf("loading from:%s\n",path);
	/* load the module, and resolve symbols now */
	module = dlopen(path, RTLD_NOW);
	if(!module) {
	       printf("error load!\n");

		msg = dlerror();
		  printf(msg);
		if(msg != NULL) {
			dlclose(module);
			exit(1);
		}
	}
      
	/* retrieve address of entry point */
	my_entry = dlsym(module, "entry");
	msg = dlerror();
	if(msg != NULL) {
		perror(msg);
		dlclose(module);
		exit(1);
	}
      
	/* call module entry point */
	my_entry();
      
	/* close module */
	if(dlclose(module)) {
		perror("error");
		exit(1);
	}
      
	return 0;
}                

module1.c :

int entry()
{
    printf("I am module one!\n");
    return 0;
}

signal
()
Ответ на: комментарий от signal

> вот примерно то что ты хочешь на си :

AFAIU примерно то, что он хочет - это ближе к CORBA's Implementation Reopisitory но никак не к dlopen(2) & K...

// wbr

klalafuda ★☆☆
()

Вообще эта хрень называется делегаты. Применяются напрмер для вызова каллбека. В делфи, в c#, в Java эта фишка есть и часто юзается. На плюсах так не делают. В качестве аргумента при передаче каллбека передают объект, который имеет напрмиер виртуальный метод callback_call, который в свою очередь дернет уже все, что нужно. В плюсах есть указатели на члены класса, но у них уродский синтаксис и их нельзя дергать без контекста. Реально их никт не юзает.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.