2017-10-07 123 views
0
class Function 
{ 
public: 
    std::string Name; 
    void call(std::string x); 

    Function(std::string Nam) 
    { 
     Name = Nam; 
    } 
}; 

std::vector<Function> funcs; 

void Load_FuncLib() 
{ 
    Function print("print"); 
    Function add("add"); 

    print.call(std::string x) 
    { 
     std::cout<< x <<"\n"; 
    } 
    add.call(std::string x) 
    { 
     std::cout<< std::stoi(x) + std::stoi(x) << "\n"; 
    } 

    funcs.push_back(print); 
    funcs.push_back(add); 

    funcs.at(0).call("Hello world"); 
} 

我希望它运行功能print.call("Hello world");之外,但它不会工作,因为我不知道如何设置的功能,这已经宣告,我也不知道如何使用矢量来调用它。我如何重新定义一个类的函数类

回答

0

你很可能想要实现这样的事情?

#include <unordered_map> 
#include <iostream> 
#include <string> 
#include <functional> 

int main() { 
    std::unordered_map<std::string, std::function<void (const std::string&)>> funcs; 

    funcs["print"] = [](const std::string& str) { 
     std::cout << str << '\n'; 
    }; 

    funcs["add"] = [](const std::string& str) { 
     int i = std::stoi(str); 
     std::cout << i + i << '\n'; 
    }; 

    funcs["print"]("Hello, World!"); 
    funcs["add"]("12"); 
} 

https://ideone.com/Ke4aEK

在任何时候都可以重置哈希映射使用其他功能的一定的价值。 另外,根据你的需要,你可以使用std :: function或者简单的函数指针。