字符串到数据类型类

时间:2013-02-24 23:52:03

标签: c++ map

我想将字符串转换为数据类型类,为此我使用reference。然后我尝试使用地图而不是以下代码。但是当我尝试编译时,我得到了

错误讯息:

  

错误:从'std :: map,void *(*)()> :: mapped_type {aka void *()()}'无效转换为'void '[-fpermissive ]

代码:

class C1 {
public:
  C1() { std::cout << "Object of class C1 created\n"; }
  static void * create() { return (void*)new C1; }
};

class C2 {
public:
C2() { std::cout << "Object of class C2 created\n"; }
static void * create() { return (void*)new C2; }
};

typedef void * (*fptr)();

int main() {
  std::map<std::string, fptr> fpmap;
  fpmap.insert(std::make_pair(std::string("C1"), C1::create));
  fpmap.insert(std::make_pair(std::string("C2"), C2::create));

  std::string classname;
  std::cout << "Insert classname :" << std::flush;
  std::cin >> classname;

  void * obj = fpmap["C1"];
}

1 个答案:

答案 0 :(得分:4)

你的意思是:

void * obj = fpmap["C1"]();

函数指针不能直接转换为void*。我希望obj指向函数本身,将其声明为fptr。如果要调用该函数并让obj指向它返回的内容,则需要调用该函数(extra ())。