Compte tenu de l'objet appelable suivant:Sur reference_wrapper et objets appelables
struct callable : public std::unary_function <void, void>
{
void
operator()() const
{
std::cout << "hello world" << std::endl;
}
};
un std::tr1::reference_wrapper<>
appels à travers elle:
callable obj;
std::tr1::ref(obj)();
Au lieu de cela, lorsque le operator()
accepte un argument:
struct callable : public std::unary_function <int, void>
{
void
operator()(int n) const
{
std::cout << n << std::endl;
}
};
std::tr1::bind
accepte un reference_wrapper comme callable wrapper e ...
callable obj;
std::tr1::bind(std::tr1::ref(obj), 42)();
mais quel est le problème avec ça?
std::tr1::ref(obj)(42);
g ++ - 4.4 ne peut pas compiler avec l'erreur suivante:
test.cpp:17: error: no match for call to ‘(std::tr1::reference_wrapper<const callable>) (int)’
/usr/include/c++/4.4/tr1_impl/functional:462: note: candidates are: typename std::tr1::result_of<typename std::tr1::_Function_to_function_pointer<_Tp, std::tr1::is_function::value>::type(_Args ...)>::type std::tr1::reference_wrapper<_Tp>::operator()(_Args& ...) const [with _Args = int, _Tp = const callable]
Je ne vois pas de différence entre le mien et le vôtre.Les arguments template de unary_function sont correctement définis, et void devrait être bon pour operator() (void). En outre, le problème est pour le second ... –