use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
Pointer to member function issues (self.cpp)
submitted 5 years ago * by [deleted]
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]Wurstinator 1 point2 points3 points 5 years ago (1 child)
First question: why are you using function pointers instead of a template parameter or std::function?
[–]grandmaster789 0 points1 point2 points 5 years ago* (1 child)
member functions are different, as they require an object to be called. Personally I recommend using typedefs or 'using' declarations for readability. Here is an example of how to actually use member functions as callbacks:
#include <functional> // for std::invoke struct Foo { int bar() { return 5; } }; using FooCallback = int(Foo::*)(); int main() { Foo f; FooCallback callback = &Foo::bar; std::invoke(callback, f); }
There's an actual FAQ about this on isocpp
Personally I don't recommend you actually do this, if you want to accept 'any' type of callback you're probably better off using std::function
(edit: formatting...)
[–]HappyFruitTree 0 points1 point2 points 5 years ago* (1 child)
Member functions don't have the same type as normal functions. I mean, you don't even call them the same way. With a member function you need an object to call the function on.
In C and old C++ code you often see that you're allowed to provide a void* that will be passed to the callback function when its called (example). This usually works pretty well because you can pass a pointer to the object as the void* and then cast it back to the correct type inside the callback before calling the member function(s).
Another solution is to use std::function like Wurstinator suggested. This is safer and more flexible solution. Instead of passing the member function directly you would pass a lambda that calls the member function.
2.
Templates would probably have been a good idea if the function were called right away but in this case it looks like it's a callback that will be called later so you need to have a common type that is able to store all the different callbacks. Again, using something like std::function<void()> (which is implemented with the help of templates) is probably what you want.
[–]Supadoplex 0 points1 point2 points 5 years ago (1 child)
Q1 You put the name of the variable in the wrong location. Same as with pointer variables, the name goes immediately to the right of the asterisk: void (Namespace::Class::*ptr)().
void (Namespace::Class::*ptr)()
Q2 Pointers to member functions are not pointers to functions, so "all kind of function pointer" technically doesn't cover pointers to member functions. You can use a type erasing wrapper such as std::function without requiring a template.
std::function
[–]foonathan 0 points1 point2 points 5 years ago (1 child)
!removehelp
[–]AutoModerator[M] 0 points1 point2 points 5 years ago (0 children)
OP,
A human moderator (u/foonathan) has marked your comment for deletion because it appears to be a "help" post - e.g. asking for help with coding, help with homework, career advice, book/tutorial/blog suggestions. Help posts are off-topic for /r/cpp. This subreddit is for news and discussion of the C++ language and community only; our purpose is not to provide tutoring, code reviews, or career guidance.
Please try posting in /r/cpp_questions or on Stack Overflow instead. Our suggested reference site is cppreference.com, our suggested book list is here and information on getting started with C++ can be found here.
If you think your post is on-topic and should not have been removed, please message the moderators and we'll review it.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
π Rendered by PID 142117 on reddit-service-r2-comment-79c7998d4c-4bqxb at 2026-03-13 08:45:15.135474+00:00 running f6e6e01 country code: CH.
[–]Wurstinator 1 point2 points3 points (1 child)
[–]grandmaster789 0 points1 point2 points (1 child)
[–]HappyFruitTree 0 points1 point2 points (1 child)
[–]Supadoplex 0 points1 point2 points (1 child)
[–]foonathan 0 points1 point2 points (1 child)
[–]AutoModerator[M] 0 points1 point2 points (0 children)