{"id":33794,"date":"2023-02-14T06:56:04","date_gmt":"2023-02-14T01:26:04","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/"},"modified":"2023-02-14T06:56:04","modified_gmt":"2023-02-14T01:26:04","slug":"solved-extracting-class-from-demangled-symbol","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/","title":{"rendered":"[Solved] Extracting class from demangled symbol"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-12447172\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"12447172\" data-parentid=\"12446880\" data-score=\"2\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>This is hard to do with perl&#8217;s extended regular expressions, which are considerably more powerful than anything in C++. I suggest a different tack:<\/p>\n<p>First get rid of the things that don&#8217;t look like functions such as data (look for the D designator). Stuff like <code>virtual thunk to this<\/code>, <code>virtual table for that<\/code>, etc., will also get in your way; get rid of them before you do you the main parsing. This filtering is something where a regexp can help. What you should have left are functions. For each function,<\/p>\n<ul>\n<li>\n<p>Get rid of the stuff after the final closing parenthesis. For example, <code>Foo::Bar(int,double) const<\/code> becomes <code>Foo::Bar(int,double)<\/code>.<\/p>\n<\/li>\n<li>\n<p>Strip the function arguments. The problem here is that you can have parentheses inside the parentheses, e.g., functions that take function pointers as arguments, which might in turn take function pointers as arguments. Don&#8217;t use a regexp. Use the fact that parentheses match. After this step, <code>Foo::Bar(int,double)<\/code> becomes <code>Foo::Bar<\/code> while <code>a::b::Baz&lt;lots&lt;of&lt;template&gt;, stuff&gt;&gt;::Baz(int, void (*)(int, void (*)(int)))<\/code> becomes <code>a::b::Baz&lt;lots&lt;of&lt;template&gt;, stuff&gt;&gt;::Baz<\/code>.<\/p>\n<\/li>\n<li>\n<p>Now work on the front end. Use a similar scheme to parse through that template stuff. With this, that messy <code>a::b::Baz&lt;lots&lt;of&lt;template&gt;, stuff&gt;&gt;::Baz<\/code> becomes <code>a::b::Baz::Baz<\/code>.<\/p>\n<\/li>\n<li>\n<p>At this stage, your functions will look like <code>a::b:: ... ::ClassName::function_name<\/code>. There is a slight problem here with free functions in some namespace. Destructors are a dead giveaway of a class; there&#8217;s no doubt that you have a class name if the function name starts with a tilde. Constructors are a near giveaway that you have a class at hand &#8212; so long as you don&#8217;t have a namespace <code>Foo<\/code> in which you have defined a function <code>Foo<\/code>.<\/p>\n<\/li>\n<li>\n<p>Finally, you may want to re-insert the template stuff you cut out.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">5<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Extracting class from demangled symbol <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] This is hard to do with perl&#8217;s extended regular expressions, which are considerably more powerful than anything in C++. I suggest a different tack: First get rid of the things that don&#8217;t look like functions such as data (look for the D designator). Stuff like virtual thunk to this, virtual table for that, etc., &#8230; <a title=\"[Solved] Extracting class from demangled symbol\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/\" aria-label=\"More on [Solved] Extracting class from demangled symbol\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[2230,324,347],"class_list":["post-33794","post","type-post","status-publish","format-standard","hentry","category-solved","tag-boost","tag-c","tag-regex"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Extracting class from demangled symbol - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Extracting class from demangled symbol - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] This is hard to do with perl&#8217;s extended regular expressions, which are considerably more powerful than anything in C++. I suggest a different tack: First get rid of the things that don&#8217;t look like functions such as data (look for the D designator). Stuff like virtual thunk to this, virtual table for that, etc., ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-14T01:26:04+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Extracting class from demangled symbol\",\"datePublished\":\"2023-02-14T01:26:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/\"},\"wordCount\":270,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"boost\",\"c++\",\"regex\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/\",\"name\":\"[Solved] Extracting class from demangled symbol - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2023-02-14T01:26:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Extracting class from demangled symbol\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Extracting class from demangled symbol - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Extracting class from demangled symbol - JassWeb","og_description":"[ad_1] This is hard to do with perl&#8217;s extended regular expressions, which are considerably more powerful than anything in C++. I suggest a different tack: First get rid of the things that don&#8217;t look like functions such as data (look for the D designator). Stuff like virtual thunk to this, virtual table for that, etc., ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/","og_site_name":"JassWeb","article_published_time":"2023-02-14T01:26:04+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Extracting class from demangled symbol","datePublished":"2023-02-14T01:26:04+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/"},"wordCount":270,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["boost","c++","regex"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/","url":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/","name":"[Solved] Extracting class from demangled symbol - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2023-02-14T01:26:04+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-extracting-class-from-demangled-symbol\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Extracting class from demangled symbol"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/33794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=33794"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/33794\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=33794"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=33794"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=33794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}