2017-10-07 170 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或者簡單的函數指針。