Existe-t-il un moyen de créer un vector< mem_fun_t< ReturnType, MyClass > >
?
L'erreur que je vois est la suivante :
error C2512: 'std::mem_fun1_t<_Result,_Ty,_Arg>' : no appropriate default constructor available
Existe-t-il un moyen de créer un vector< mem_fun_t< ReturnType, MyClass > >
?
L'erreur que je vois est la suivante :
error C2512: 'std::mem_fun1_t<_Result,_Ty,_Arg>' : no appropriate default constructor available
Vous pouvez certainement créer un tel vecteur.
#include <vector>
#include <functional>
#include <iostream>
struct MyClass
{
int a() { return 1; }
int b() { return 2; }
};
int main()
{
std::vector<std::mem_fun_t<int, MyClass> > vec;
vec.push_back(std::mem_fun(&MyClass::a));
vec.push_back(std::mem_fun(&MyClass::b));
MyClass x;
for (size_t i = 0; i != vec.size(); ++i) {
std::cout << vec[i](&x) << '\n';
}
}
Si vous rencontrez des problèmes, lisez attentivement le message d'erreur. Par exemple, le message d'erreur std::mem_fun
peut renvoyer toutes sortes d'enveloppes, en fonction de ce que vous lui passez.
Ou bien, en effet, passer à boost ou à C++0x function
.
Edit : Avec ce message d'erreur particulier, je suppose que vous faites quelque chose qui invoque le constructeur par défaut pour le type contenu (par ex. resize
ou en spécifiant la taille dans le constructeur du vecteur). Vous ne pouvez pas utiliser ces fonctions.
mem_fun_t
remplit les conditions requises pour être stocké dans un conteneur (il peut être construit à partir de copies et peut être cédé), la réponse est donc oui.
Cependant, il n'est pas constructible par défaut ou comparable, de sorte qu'il y a certaines choses que vous ne pouvez pas faire avec un conteneur de ce type :
L'erreur que vous rencontrez provient d'une tentative de redimensionnement ou de construction avec une taille.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.