C++ Carte de la chaîne et de membre de pointeur de fonction
Hey je suis donc faire une carte avec de la ficelle comme clé et un membre de pointeur de fonction en tant que valeur. Je n'arrive pas à comprendre comment ajouter de la carte, cela ne semble pas fonctionner.
#include <iostream>
#include <map>
using namespace std;
typedef string(Test::*myFunc)(string);
typedef map<string, myFunc> MyMap;
class Test
{
private:
MyMap myMap;
public:
Test(void);
string TestFunc(string input);
};
#include "Test.h"
Test::Test(void)
{
myMap.insert("test", &TestFunc);
myMap["test"] = &TestFunc;
}
string Test::TestFunc(string input)
{
}
Une supposition, mais
Semble corriger une erreur dans les paramètres, mais j'ai toujours une erreur pour insérer
C'est parce que
Ce qui ne "cela ne semble pas être au travail"?
Être précis, de citer les erreurs. Concernant insert(), vous devez convertir le type correct, qui est une paire en<const T1, T2>, aka map::value_type.
&Test::TestFunc
?Semble corriger une erreur dans les paramètres, mais j'ai toujours une erreur pour insérer
C'est parce que
insert
ne fonctionne pas de cette façon.Ce qui ne "cela ne semble pas être au travail"?
Être précis, de citer les erreurs. Concernant insert(), vous devez convertir le type correct, qui est une paire en<const T1, T2>, aka map::value_type.
OriginalL'auteur ThingWings | 2013-01-19
Vous devez vous connecter pour publier un commentaire.
Voir
std::map::insert
etstd::map
pourvalue_type
et pour
operator[]
Vous ne pouvez pas utiliser un pointeur de fonction membre sans objet. Vous pouvez utiliser le pointeur de fonction membre d'un objet de type
Test
ou avec un pointeur de type
Test
Voir aussi C++ FAQ - Pointeurs vers des fonctions de membre du
std::map<A,B>::value_type
estpair<const A,B>
je préfère insérerMyMap::value_type(a, b)
passtd::make_pair(a,b)
sinon vous obtiendrezpair<A,B>
qui doit être converti enpair<const A,B>
et que la conversion ne peut pas être gommés.Belle prise!
Je me demande si en passant d'un littéral de chaîne make_pair est censé fonctionner? Après tout, l'implicite type de modèle, il est de type char[5], pas de std::string ou somesuch.
c'est const
char[5]
, et en C++03make_pair
prend ses arguments par valeur, de sorte que le tableau se désintègre à un pointeur dans la liste d'arguments, et en C++11 le type de retour utilise std::pourriture<const char[5]>::type` qui désintègre aussi à un pointeur. De sorte qu'il fonctionne parfaitement.Vous avez raison, ce sera un
std::pair<const char*, ...>
et passtd::pair<std::string, ...>
. Bien que cela fonctionne, Jonathan Wakely la version qui doit être privilégiée.OriginalL'auteur Olaf Dietsche