C++ 我如何引用c++;外面的方法?
比如说,我有一些类,C++ 我如何引用c++;外面的方法?,c++,qt,C++,Qt,比如说,我有一些类,Music,Video,Photo,还有一个名为Control,Control有一个方法,centercall(char*fuction\u name,char*json\u para),fuction\u name可以是音乐,视频的一个,Photo的成员方法。因此,我想从Control的centercall函数调用member方法 class Contact { pubilc: Contact(); void getallcontact(char* data); v
Music
,Video
,Photo
,还有一个名为Control
,Control
有一个方法,centercall(char*fuction\u name,char*json\u para)
,fuction\u name
可以是音乐
,视频的一个,Photo
的成员方法。因此,我想从Control
的centercall
函数调用member方法
class Contact {
pubilc:
Contact();
void getallcontact(char* data);
void changeContact(char* data);
void addacontact(char* data);
};
class Music {
public :
Music();
void getMusic(char* data);
void addMusic(char* data);
void playMusic(char* data);
}
class Video {
public:
Video();
void getVideo(char* data);
void addVideo(char* data);
}
class Photo {
public:
photo();
void getPhoto(char* data);
}
class Control {
public:
Control();
centerlcall(char* fuction_name,char* json_para){
//check function_name is in video ,photo,music ,if in , call the method .
}
}
我怎么做呢?满了吗
我想要的不是让usr直接调用Music的getMusic或其他,而是调用centercall,告诉centercall他想要调用什么方法,这类似于ajax。函数指针就够了!用面向对象的方式
class Stuff {
public:
virtual ~Stuff();
virtual void get(char* data) = 0;
};
class Music : public Stuff{
public :
Music();
void get(char* data);
}
class Video : public Stuff {
public:
Video();
void get(char* data);
}
class Photo : public Stuff {
public:
Photo();
void get(char* data);
}
class Control {
public:
Control();
void centerlcall(Stuff* hisStuff, char* json_para){
hisStuff->get(/* whatever */);
}
}
漂亮
“谢谢,我想使用像jni这样的东西,像music这样的每个类都有一个regist方法来注册要控制的导出方法,但我不知道如何编写它。”
类控制{
公众:
控制();
void centercall(Stuff*histuff,char*json_para){
他的东西->获取(/*无论什么*/);
}
空类寄存器({数据){//< p>因为类没有任何共同点,所以必须保存你想调用的函数。注意C++不为你做这个,没有像函数名那样存储的元数据,你必须自己做,例如:
class Control {
std::unordered_map<std::string,std::function<void(char*)>> functions;
public:
Control();
centerlcall(char* fuction_name,char* json_para){
functions[function_name](json_para);
}
}
类控制{
std::无序的_映射函数;
公众:
控制();
CenterCal(字符*功能\名称,字符*json \段落){
函数[函数名称](json_段落);
}
}
当然,您仍然需要将相关函数添加到映射中,也许您希望键不是函数名,而是对象名+函数名,…。或者您可以使用事件/信号库,它应该为您提供适当的框架来完成此操作,而不是重新发明轮子
无关:请不要使用像char*
,而是使用std::string
。当你调用getMusic
时,你希望发生什么?请使用适当的标点符号,文本很难阅读。我想逗号是开着的sale@mike视频、照片……存储在哪里?如果你想,你可以在我这里存储n控件。不,我不会更改函数名,这只是一个示例,不同的类会有不同的方法。@mike随你的便。谢谢,我想使用类似jni的东西,像音乐这样的每个类都有一个regist方法来注册导出的控件方法,但我不知道如何编写它。@mike,不客气。还有,请记住er:只要有可能,就用面向对象的方法来做!这是一个糟糕的建议。面向对象只是一个适合一系列问题的可能概念,除了面向对象之外,还有足够多的编程范例,可以更好地匹配各种各样的问题。是的,我想用这样的方法,但是我可以添加一个c++的方法来映射吗?是的,你可以,只要阅读bi就可以了t关于和;)。请注意,如果您不能使用C++11,几乎所有这些都可以在boost中使用。
class Control {
std::unordered_map<std::string,std::function<void(char*)>> functions;
public:
Control();
centerlcall(char* fuction_name,char* json_para){
functions[function_name](json_para);
}
}