Par exemple, je veux écrire des fonctions de surcharge pour set_difference
qui compare le type std::set<point>
Comment écrire des opérateurs de surcharge pour les conteneurs STL et les fonctions alogrithm?
class myIter : public std::iterator<std::input_iterator_tag, int> {
public:
myIter(int n) : num(n){}
myIter(const myIter & n) : num(n.num){}
int & operator *(){return num;}
myIter & operator ++(){++num; return *this;}
bool operator !=(const myIter & n){return n.num != num;}
private:
int num;
};
struct point
{
point(int X, int Y):x(X), y(Y){}
int x;
int y;
}
int main()
{
set <point> myset;
myset.insert(point(1, 1);
myset.insert(point(3, 2);
myset.insert(point(5, 3);
//find the missing elements in set for `point.x` using `set_difference`
std::set<int> missing;
std::set_difference(myIter(myset.begin()->x+1), myIter(myset.rbegin()->x),
myset.begin(), myset.end(), std::insert_iterator<std::set<int>>(missing, missing.begin()));
}
Après avoir appliqué les std::set_difference
sur point.x
les variables du set<int> missing
doit être:
missing[0] {2}
missing[1] {4}
Comment puis-je savoir comment écrire les opérateurs de surcharge pour l'opération?
Notez l'utilisation de 'Boost.Operators' pour définir de façon transparente les « opérateurs completary » :) automatiquement –
@Matthieu: Je comptais sur vous pour apparaître et suggérer cette. ':)' (Je n'ai pas eu l'occasion de faire beaucoup de C++ depuis un an maintenant, donc je n'ai jamais essayé de le faire, et je ne suis pas à l'aise de suggérer quelque chose que je n'ai pas fait et que je ne sais pas – sbi
mon plaisir :) il est plus de sucre syntaxique pour éviter d'écrire le code standard que tout "fonctionnel", mais il aide à garder le code bien rangé. –