Re: overload resolution and function pointer
Am 11.05.2012 21:21, schrieb Marc:
Hello,
I have several overloads of a function, I have a set of arguments, and
I would like to get a function pointer to the overload the compiler
would pick if I called this function on these arguments. I am not
interested in applying the function now, I just want to get that
pointer.
Is this possible? Or is anything vaguely similar possible?
I don't know how to realize your exact need, but consider the following
as an alternative:
// Examples:
void f(int){}
void f(double){}
void f(int, bool){}
#include <utility>
template<class... Args>
struct f_caller
{
auto operator()(Args&&... args) const ->
decltype(f(std::forward<Args>(args)...))
{
return f(std::forward<Args>(args)...);
}
};
If we consider this template as a kind of "holder" for some particular
function overload f, what kind of property is missing for your use-case?
Here an example of usage:
template<class... Args>
auto test(Args&&... args) -> f_caller<Args...>
{
return f_caller<Args...>();
}
int main(){
test(0, true);
test(1.2);
test(2);
auto f2 = test(0, 0);
f2(0, 0);
}
There is a way of considering f2 as a function-pointer like storage of
some unknown f. We could proceed and reduce f_caller to a functor that
can be called without any arguments when we redefine it such that it
also binds the original arguments. Since I don't know what your actual
intention is, I leave that demonstration here - it might not what you
want to realize.
HTH & Greetings from Bremen,
Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]