将函数指针存储在地图中作为值

时间:2013-06-26 11:50:44

标签: c++ map stl

我正在尝试使用以下代码将函数指针存储在地图中作为值。 我正在使用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.

但直接指定没有插入工作。

有人可以告诉我为什么汇编在这里失败了吗?

2 个答案:

答案 0 :(得分:0)

int foo(int,char,char *);
int bar(int,char,char *);

第二个参数你错了,它应该是string。 此外,最好使用std::make_pair,而不是手动构造对。

答案 1 :(得分:0)

可能是正在抛弃编译器的前向声明。这些与实际的函数定义不匹配,无论如何都不需要这个例子:

int foo(int,char,char *);
int bar(int,char,char *);