接受字符串来调用函数

时间:2014-06-16 21:16:51

标签: c++ string function

在我开始之前,我知道这个问题对你来说可能是荒谬的,但只是忍受我这个问题

void hello()
{
    cout<<"used as a greeting or to begin a telephone conversation.";
 }
void main()
{
    #define a b()
    char b[]="hello";
    a;

}

所以在上面的代码中举例说,有一些函数像hello(几乎成千上万),我希望用户输入一个字符串(字符数组)然后程序用来调用一个函数已经制定或定义。 就像上面的例子一样,用户输入了hello,然后程序必须从那里调用函数。

我知道这个程序不对,但只是忍受我。 如果问题不够明确,请留下评论,我会尽快回复。

2 个答案:

答案 0 :(得分:2)

您可以使用std::functionstd::map将字符串映射到函数:

std::map<std::string, std::function<void()>> map;
map["hello"] = hello;

Live demo

然后您通过map搜索用户在std::map::find中输入的内容。

答案 1 :(得分:1)

以下可能会有所帮助:

#include <iostream>
#include <map>
#include <string>
#include <functional>

void hello_world() { std::cout << "hello world" << std::endl; }
void question() { std::cout << "The answer is 42" << std::endl; }

int main()
{
    bool finish = false;
    std::map<std::string, std::function<void()>> m = {
        {"hello", hello_world},
        {"question", question},
        {"exit", [&finish](){ finish = true; }},
    };

    while (!finish) {
        std::string input;

        std::cin >> input;

        auto it = m.find(input);
        if (it == m.end()) {
            std::cout << "the known input are" << std::endl;
            for (auto it : m) {
                std::cout << it.first << std::endl;
            }
        } else {
            it->second();
        }

    }
    return 0;
}