![](/img/trans.png)
[英]How do I initialise a Pointer to a Object inside a std::array (container)?
[英]How do I initialise a global map of string to function pointer?
template <typename T>
void draw_rectangle() {
display();
glRecti(10, 10, curr_obj_to_draw<T>->get_length() + 10, curr_obj_to_draw<T>->get_breadth() + 10);
}
std::map<std::string, void (*)()> str_to_fp_mapping;
void initialise_map(){
str_to_fp_mapping = {std::pair<std::string, void (*)()>("rectangle", &draw_rectangle)};
}
错误 :
std::pair<std::string, void (*)()> 没有匹配的构造函数
奇怪的是,当它在一个类中时,我能够正确地初始化它,但是以程序的方式把它搞砸了。
如何初始化地图?
您可以直接使用构造函数对其进行初始化:
#include <map>
void draw_rectangle() {
// ...
}
void draw_circle() {
// ...
}
void draw_mona_lisa() {
// .....
}
// templated function
template<class T>
void draw_type() {
//...
}
std::map<std::string, void (*)()> str_to_fp_mapping {
{"draw rectangle", draw_rectangle },
{"draw circle", draw_circle },
{"draw mona lisa", draw_mona_lisa },
{"draw string", draw_type<std::string> } // Template example
};
如果你这样做,那么你永远不必调用initialize
函数,因为它在调用main
之前被初始化。 如果你把:
std::map<std::string, void (*)()> str_to_fp_mapping{};
这也会初始化它,但它会将它初始化为一个空映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.