I’m trying to convert a construct like this:
template <class R, class T>
struct Foo {
Foo(R (T::*m)) : member(m) {}
R T::*member;
};
template <class R, class T>
Foo<R, T> makeFoo(R (T::*m)) {
return Foo<R, T>(m);
}
struct S { int a; };
makeFoo(&S::a);
into something where the member pointer is a template parameter:
template <class R, class T, R (T::*member)>
struct Foo {};
template <class R, class T, R (T::*member)>
Foo<R, T, member> make Foo() {
return Foo<R, T, member>();
}
struct S { int a;};
makeFoo<int, S, &S::a>();
but this forces me to explicitly specify the return type and class type. This is exactly why I used the helper function in the first example. I’m sure there has to be a workaround somehow that’ll allow me to say something like the following and have the compiler deduce the missing parts:
makeFoo<&S::a>()
I can’t think of a better place to ask than here.
Thanks
Mats Nilsson