2017-10-07 11 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"); 
} 

Je veux qu'il fonctionne la fonction print.call("Hello world"); fonction d'une classe, mais il ne fonctionnera pas car je ne sais pas comment définir une fonction, qui est déjà déclarée, et je ne savoir comment l'appeler en utilisant un vecteur.Comment puis-je redéfinis en dehors de la classe

Répondre

0

Vous souhaitez probablement réaliser quelque chose comme ça?

#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

A tout moment vous pouvez rétablir une certaine valeur de la carte de hachage avec une autre fonction. En outre, selon vos besoins, vous pouvez utiliser std :: function ou simplement des pointeurs de fonction.