{"id":316,"date":"2014-08-24T20:42:34","date_gmt":"2014-08-24T18:42:34","guid":{"rendered":"https:\/\/blog.ramses-pyramidenbau.de\/?p=316"},"modified":"2014-10-15T22:40:42","modified_gmt":"2014-10-15T20:40:42","slug":"cs-pointer-to-member-operator","status":"publish","type":"post","link":"https:\/\/blog.vmexit.de\/?p=316","title":{"rendered":"C++&#8217;s &#8220;pointer-to-member&#8221; operator"},"content":{"rendered":"<p>Lessons learned today: There are still operators in C++ I did not know \ud83d\ude42<\/p>\n<p>I was suprised when I saw these strange operators <b>->*<\/b> and <b>.*<\/b>.<\/p>\n<p>You can use those operators when you have a pointer to a member function. In order to call this function, you need an explicit instance. <b>->*<\/b> and <b>.*<\/b> combines function pointer and instance. <b>.*<\/b> is a built-in operator and cannot be overloaded. <b>->*<\/b> may be overloaded.<\/p>\n<pre class=\"brush: cpp; light: true; title: ; notranslate\" title=\"\">\r\nclass A\r\n{\r\npublic:\r\n   void f() {}\r\n   void g() {}\r\n};\r\n\r\n\r\n...\r\n\r\nvoid (A::*ptr)(); \/\/ This is a pointer to a member function of A\r\n\r\n\/\/ Let the pointer point to f\r\nptr = &amp;A::f;\r\n\/\/ We cannot use this pointer without an object\r\nA a;\r\n(a.*ptr)() \/\/ Call f on instance a\r\n\/\/ Now we have a pointer to an instance\r\nA *b = new A;\r\n(b-&gt;*ptr)() \/\/ Call f on instance b\r\n<\/pre>\n<p><a href=\"http:\/\/stackoverflow.com\/questions\/6586205\/what-are-the-pointer-to-member-and-operators-in-c\" title=\"Moret on this\">More on this<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lessons learned today: There are still operators in C++ I did not know \ud83d\ude42 I was suprised when I saw these strange operators ->* and .*. You can use those operators when you have a pointer to a member function. In order to call this function, you need an explicit instance. ->* and .* combines &hellip; <a href=\"https:\/\/blog.vmexit.de\/?p=316\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">C++&#8217;s &#8220;pointer-to-member&#8221; operator<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-316","post","type-post","status-publish","format-standard","hentry","category-c"],"_links":{"self":[{"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=\/wp\/v2\/posts\/316","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=316"}],"version-history":[{"count":10,"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=\/wp\/v2\/posts\/316\/revisions"}],"predecessor-version":[{"id":327,"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=\/wp\/v2\/posts\/316\/revisions\/327"}],"wp:attachment":[{"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=316"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=316"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.vmexit.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}