Victor Bazarov
10/3/2008 6:38:00 PM
JanW wrote:
> Somewhat a C++ beginner, I'm trying to make a general test function that
> could test unary operators (or methods) of an object of any class.
>
> Arguments are a member-pointer to the function, a single input argument
> of some type for that function, and the expected result of some type.
> Then it tests if the result is as expected, and does some logging of the
> results (pass, fail) etc.
>
> Well, the template "mess" does not quite work out.
>
> Below is the code. After that, the error messages.
>
> --------------------------------------------------------
>
> class A {
> int f (int c) { return c; }
> int f (const char c) { return c; }
> A& operator+= (A const& a) { return *this; }
> };
>
> template <class rettype, class argtype, class btype>
> bool unary_op_test(rettype (*func)(argtype),
> btype self, argtype arg, rettype expect)
> {
> rettype rv = self.func(arg);
> bool result = (rv == expect);
> return result;
> }
>
> int main ()
> {
> A aa;
> int (A::*p1)(int) = &A::f;
> A& (A::*p2)(A const&) = &A::operator+=;
> unary_op_test<int,int,A&>(p1, aa, 12, 12);
> unary_op_test<A&,A&,A&>(p2, aa, aa, aa);
> unary_op_test<A&,const A&,A&>(p2, aa, aa, aa);
> }
>
> --------------------------------------------------------
>
> $ g++ -Wall -pedantic test.cc
> test.cc: In function 'int main()':
> test.cc:21: error: no matching function for call to 'unary_op_test(int
> (A::*&)(int), A&, int, int)'
> test.cc:22: error: no matching function for call to 'unary_op_test(A&
> (A::*&)(const A&), A&, A&, A&)'
> test.cc:23: error: no matching function for call to 'unary_op_test(A&
> (A::*&)(const A&), A&, A&, A&)'
>
> --------------------------------------------------------
>
> How come "A& (A::*&)(const A&)" does not map to "rettype
> (*func)(argtype)"<templated> i.e. to "A&(*func)(const A&)"?
>
> Sure some beginner mistake somewhere... :)
>
> Any ideas?
Only one idea so far: the type "a pointer to a [non-static] member
function of class T" is not convertible to "a pointer to function".
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask