I'm trying to wrap my head around pointers to member functions and am stuck with this example:
#include <iostream>
class TestClass {
public:
void TestMethod(int, int) const;
};
void TestClass::TestMethod(int x, int y) const {
std::cout << x << " + " << y << " = " << x + y << std::endl;
}
int main() {
void (TestClass::*func)(int, int) const;
func = TestClass::TestMethod;
TestClass tc;
tc.func(10, 20);
return 0;
}
What I think the code should do:
class TestClass, which returns nothing/takes two int's and is declared const, called func.TestMethod (of class TestClass) to func, which satisfies these criteria.TestClass-object called tc.func on the TestClass-object tc.I get two compilation errors:
Instead of assigning TestClass::TestMethod to func. The compiler tries to call TestClass::TestMethod (even though it's not static, therefore throws an error):
testPointerToMemberFunc.cpp:14:21: error: call to non-static member function without an object argument func = TestClass::TestMethod; ~~~~~~~~~~~^~~~~~~~~~
The compiler tries to call a function named func on tc, instead of the function, pointed to by func. To me this seems, like func isn't declared the right way (as a pointer to a member function):
testPointerToMemberFunc.cpp:17:6: error: no member named 'func' in 'TestClass' tc.func(10, 20); ~~ ^
What am I doing wrong?
Simple syntax subtleties.
func = &TestClass::TestMethod;
// ^ Missing ampersand to form a pointer-to-member
TestClass tc;
(tc.*func)(10, 20);
// ^^ Using the dot-star operator to dereference the pointer-to-member,
// while minding its awkward precedence with respect to the call operator.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With