gpt4 book ai didi

C++ 函数指针类未在 GCC 中编译?

转载 作者:行者123 更新时间:2023-11-30 04:27:50 26 4
gpt4 key购买 nike

我正在尝试创建一个可以容纳并稍后调用函数的类。它将函数与包含函数名称的字符串一起存储在映射中。

我尝试在 Linux 上使用 GCC 执行此操作并收到以下错误:"invalid conversion from void(*)() to void *" on the line functionsMap[nameOfFunction] = func ;

这是我到目前为止的整个程序。它还没有完成,但我真的很好奇为什么这会在 Visual C++ 而不是 GCC 下编译。如果我做错了什么或者可以做得更好,请告诉我。谢谢!

#include <iostream>
#include <map>
#include <string>
using namespace std;

class Dyn_Class{
private:
map<string, void *> functionsMap;

public:
Dyn_Class(){}

template<typename ReturnValue>
void add_func( string nameOfFunction, ReturnValue(*func)() ){
functionsMap[nameOfFunction] = func;
}

void remove_func( string nameOfFunction ){

}

Dyn_Class operator()(string nameOfFunction){

}
};

void print(void){
for(int index = 0; index < 9; index++){
cout << index << " ";
}
cout << endl;
}

int main(){
Dyn_Class functionsList;

functionsList.add_func("print", print);

return 0;
}

最佳答案

要拥有指向不带参数并返回 void 的函数的指针映射,您需要:

std::map<std::string, void(*)()> functionsMap; 

add_func 设为模板是没有意义的,因为它只有在使用 ReturnValue = void 实例化时才有效(除非您在其实现中添加可能不安全的转换)。

如果您的代码使用 Visual C++ 编译,那是因为 Visual C++ 是宽松的。

关于C++ 函数指针类未在 GCC 中编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com