将函数指针作为值存储在映射中
Storing a function pointer in a map as a value
我正试图用下面的代码将函数指针作为值存储在映射中。我正在solaris sparc服务器上工作。下面是我写的代码。
#include<iostream>
#include<sstream>
#include<map>
using namespace std;
typedef int (*spl_handler)(int,string,char *);
typedef map<string, spl_handler> mo_map;
int foo(int,char,char *);
int bar(int,char,char *);
int foo(int a,string b,char * str)
{
cout <<"i am in foo "<<a<<endl;
cout <<"i am in foo "<<b<<endl;
cout <<"i am in foo "<<str<<endl;
return 0;
}
int bar(int a,string b,char * str)
{
cout <<"i am in bar "<<a<<endl;
cout <<"i am in bar "<<b<<endl;
cout <<"i am in bar "<<str<<endl;
return 0;
}
int main()
{
mo_map m;
//m["foo"]=&foo; //compiling works if i write like this .
m.insert(std::pair<string,spl_handler>(string("foo"),&foo)); //compilation fails here????
return 0;
}
我得到一个错误说:
> CC spl_handler.cc
"spl_handler.cc", line 34: Error: Could not find a match for std::pair<std::string, int(*)(int,std::string,char*)>::pair(std::string, int(*)(int,char,char*)) needed in main().
1 Error(s) detected.
但是在没有插入的情况下直接分配是可行的。
有人能告诉我为什么这里的汇编失败了吗?
int foo(int,char,char *);
int bar(int,char,char *);
第二个参数错误,应该是string
。此外,最好使用std::make_pair
,而不是手动构造对。
可能是抛出编译器的前向声明。这些与实际的函数定义不匹配,在本例中也不需要:
int foo(int,char,char *);
int bar(int,char,char *);
相关文章:
- 如何从存储在std::映射中的std::集中删除元素
- C++在一个映射中存储不同的指针类型(并处理销毁)
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- 在映射中存储模板类函数指针
- 使用无序映射在STL中存储键值对
- 将大型对象存储在无序映射中是否效率低下
- C++调用存储在映射结构中的函数指针
- 将模板类型参数的映射存储到C++中的矢量中:Visual Studio
- 如何在类中存储指向字符串到成员函数映射的智能指针,以便它不会因类型不完整而失败?
- 将 STL 映射存储到 Boost ConstBufferSequence 中
- C++ - 使用映射存储回调函数
- 张量类,它有自己的存储,但也可以映射外部指针
- 尝试在映射C++中存储指向抽象类的指针
- 处理对存储在私有映射中的值的封装访问的标准方法,而不破坏C++中的抽象
- c++存储映射元组的引用,以便在另一个函数中使用
- 如何调用存储在映射中的函子
- 通过多个键和存储映射对大量向量进行排序
- 避免重复存储映射密钥
- 在TLS中存储映射——c++中的线程安全
- 尝试存储映射插入的返回值时出错