我想将字符串转换为数据类型类,为此我使用 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/