【发布时间】:2025-12-04 06:50:01
【问题描述】:
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 没有匹配的构造函数<:string void>
奇怪的是,当它在一个类中时,我能够正确地初始化它,但是以程序的方式把它搞砸了。
如何初始化地图?
【问题讨论】:
-
尝试
str_to_fp_mapping["rectangle"] = &draw_rectangle<type>;或str_to_fp_mapping.insert(std::make_pair("rectangle", &draw_rectangle<type>));,其中type是您要传递给模板的类型,例如int等... -
Remy 在我之前清理了它,但要小心 pre 标签。它们不适用于 C++ 代码。最好将所有代码缩进 4 个空格,以尊重 C++ 代码格式。选择代码并单击
{}按钮或按CTRL+K。 -
@user4581301 今天好多用户都在用
<pre>格式化代码,不知道为什么... -
您确定不想使用
std::function代替吗? -
@Remy 不知道。在过去的几周里,我看到了很多这样的反引号。
标签: c++