Pour ceux qui utilisaient déjà Boost, rien de fondamentalement nouveau sous le soleil: C++0x fournit enfin en standard une implémentation de pointeur partagé, ainsi que la fonction de bind qui va bien. Le vieux code Boost peut être mis à jour simplement en remplaçant vos boost:: par des std::, hormis cependant une petite subtilité: les paramètres tels _1, _2, ne sont pas dans le namespace global comme avec boost, mais dans le namespace std::placeholders. L'on pourra soit faire un using namespace std::placeholders;, soit, pour éviter les conflits si l'on inclut également Boost, créer un alias afin de réduire la verbosité du code.
#include <iostream>
#include <algorithm>
#include <memory>
#include <vector>
#include <string>
namespace p = std::placeholders;
class Miaou
{
public:
Miaou(const std::string & v):
m_v(v)
{
}
void print()
{
std::cout << m_v << std::endl;
}
private:
std::string m_v;
};
int main()
{
std::vector<std::shared_ptr<Miaou> > v =
{std::shared_ptr<Miaou>(new Miaou("a")),
std::shared_ptr<Miaou>(new Miaou("b")),
std::shared_ptr<Miaou>(new Miaou("c"))};
std::for_each(v.begin(),
v.end(),
std::bind(&Miaou::print, p::_1));
return 0;
}
Avec ces constructions additionnelles de ce côté, et les lambdas de l'autre, ce sont tous les algorithmes qui deviennent bien plus utiles. Je rêve de pouvoir enfin donner à std::accumulate la place qui lui revient!
Aucun commentaire:
Enregistrer un commentaire