|
Boost Users : |
From: Nat Goodspeed (nat_at_[hidden])
Date: 2008-05-22 16:31:10
Hansi wrote:
> I want to make a functor which uses automatically an reference type if
> the provided value isn't a pointer.
>
> Now the only thing that I don't like very much is that the user has to
> provide the template argument for setter. Is there some possibility to
> solve it that the template argument is automatically deduced?
> Important is that I have to possible calls one when the value is
> provided as value -> I need to have a reference parameter and the other
> is when a pointer is provided.
The following works for me:
#include <iostream>
#include <boost/lexical_cast.hpp>
template<typename Value>
void Set(const std::string& newVal, Value* pVal)
{
*pVal = boost::lexical_cast<Value>(newVal);
}
template<typename Value>
void Set(const std::string& newVal, Value& refVal)
{
refVal = boost::lexical_cast<Value>(newVal);
}
int main(int argc, char *argv[])
{
int target;
Set("17", &target);
std::cout << "Set(Value*) produced " << target << '\n';
Set("34", target);
std::cout << "Set(Value&) produced " << target << '\n';
return 0;
}
If you want those overloaded template free functions to forward to a
functor, that should be fine too: as you see, inside them you can
explicitly name the inferred type.
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net