我有一个定义为的类
class modify_field
{
public:
std::string modify(std::string str)
{
return str;
}
};
Run Code Online (Sandbox Code Playgroud)
有没有办法将此函数名称存储在main函数的字符串中,然后调用它.我尝试了这个,但它不起作用.
int main()
{
modify_field mf;
std::string str,str1,str2;
str = fetch_function_name(); //fetch_function_name() returns string modify
str2 = "check";
cout << str; //prints modify
str1 = str + "(" +str2 + ")";
mf.str1();
}
Run Code Online (Sandbox Code Playgroud)
我知道这是错的.但我只想知道是否有任何方法可以使用变量调用函数名称.
这在C++中是不可能直接实现的.C++是一种编译语言,因此函数和变量的名称不存在于可执行文件中 - 因此代码无法将字符串与函数名称相关联.
您可以通过使用函数指针获得类似的效果,但在您的情况下,您也尝试使用成员函数,这会使问题复杂化.
我会做一个小例子,但想在我花10分钟编写代码之前得到答案.
编辑:这里有一些代码来表明我的意思:
#include <algorithm>
#include <string>
#include <iostream>
#include <functional>
class modify_field
{
public:
std::string modify(std::string str)
{
return str;
}
std::string reverse(std::string str)
{
std::reverse(str.begin(), str.end());
return str;
}
};
typedef std::function<std::string(modify_field&, std::string)> funcptr;
funcptr fetch_function(std::string select)
{
if (select == "forward")
return &modify_field::modify;
if (select == "reverse")
return &modify_field::reverse;
return 0;
}
int main()
{
modify_field mf;
std::string example = "CAT";
funcptr fptr = fetch_function("forward");
std::cout << "Normal: " << fptr(mf, example) << std::endl;
fptr = fetch_function("reverse");
std::cout << "Reverse: " << fptr(mf, example) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当然,如果你想将函数存储在a中map<std::string, funcptr>,那么这是完全可能的.