如何将字符串的全局映射初始化为函数指针
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::p air<std::string,>
奇怪的是,当它在类中时,我能够正确初始化它,但是采用程序化的方式已经搞砸了。
如何初始化地图?
您可以使用构造函数直接初始化它:
#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{};
这也初始化它,但它将其初始化为空映射。
避免在更复杂的程序中双重初始化
如果将程序分成几个静态链接的 cpp 文件,则希望避免双重初始化全局变量。有关如何执行此操作的说明,请参阅此答案。
相关文章:
- 正在初始化函数指针的constexpr数组
- 我应该在C++中使用构造函数还是初始化函数
- 使用 extern const 初始化函数
- 初始化函数中的静态变量,而不是在文件开始时
- 如何初始化函数中指针数组的大小
- 正在初始化初始化函数中的静态类成员
- call_once初始化函数
- SWIG + CMAKE:缺少初始化函数
- 如何创建在 c++ 中只读取一次的初始化函数
- 类内的强制初始化函数
- 使用元编程在编译时初始化函数数组
- 数组初始化函数:将数组作为指针传递:C++
- 从nodejs模块初始化函数报告失败
- 导入错误:动态模块未定义初始化函数
- 大括号初始化函数指针数组:从 'void (*(*)())()' 到 'void (*)()' 的转换无效
- 奇怪的行为,用 int 初始化函数指针
- 使用 init_seg 调用初始化函数
- 正在初始化函数内部的std::数组
- 初始化函数内部的指针.它是如何工作的
- JNI初始化函数以及缓存类和字段