gpt4 book ai didi

c++ - 如何将字符串的全局映射初始化为函数指针?

转载 作者:行者123 更新时间:2023-11-30 04:48:58 24 4
gpt4 key购买 nike

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)};
}

错误:

No matching constructor for std::pair<std::string, void (*)()>

奇怪的是,当它在一个类中时,我能够正确地初始化它,但是以过程方式放入却把它搞砸了。

如何初始化 map ?

最佳答案

您可以直接使用构造函数对其进行初始化:

#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 文件,您希望避免双重初始化全局变量。参见 this answer有关如何执行此操作的说明。

关于c++ - 如何将字符串的全局映射初始化为函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55602557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com