c++ - 字符串到数据类型类

标签 c++ dictionary

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

错误信息:

error: invalid conversion from 'std::map, void* (*)()>::mapped_type {aka void* ()()}' to '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"];
}

最佳答案

你的意思是:

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

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

关于c++ - 字符串到数据类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15058145/

相关文章:

c++ - 数组初始化

function - Clojure - 自动将映射条目转换为函数参数的语法糖?

python:使用类而不是字典的开销?

python - 如何使用Python中的字典替换列表中的字符

c++ - MSVC 调试文件夹中包含的这个 'incremental linker file' 是什么?

c++ - C 中的指针和继承 - 转换问题?

c++ - 所有 OpenGL 纹理调用中使用的 "level"参数到底是什么?

c++ - #includes 和不完整类型有问题

python - 在 json 文件中搜索字符串

mysql - 如何将 BGL 转换为 MySQL 表?