<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent posts to Help</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/</link><description>Recent posts to Help</description><atom:link href="https://sourceforge.net/p/cppheaderparser/discussion/837844/feed.rss" rel="self"/><language>en</language><lastBuildDate>Thu, 08 Sep 2016 05:56:48 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/cppheaderparser/discussion/837844/feed.rss" rel="self" type="application/rss+xml"/><item><title>Namespace separation of symbols</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/8988295d/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Bug #64 opened.  Thank you.  I think the obvious fix is &lt;em&gt;likely&lt;/em&gt; to succeed, but I wanted a more experienced noodling over it before diving in.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jason Smith</dc:creator><pubDate>Thu, 08 Sep 2016 05:56:48 -0000</pubDate><guid>https://sourceforge.net202fceb9de00c9ee1052e2c5251ec48109b52ca0</guid></item><item><title>Namespace separation of symbols</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/8988295d/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;I'll have to think about how to do this one.  Please open a bug.  I fear the fix may be to store names as "A::X" rather than "X" where the namespace is A as an attribute.  But there may be backwards incompatibility for some... something to think about.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jashua Cloutier</dc:creator><pubDate>Tue, 06 Sep 2016 01:07:58 -0000</pubDate><guid>https://sourceforge.net4046c196363d01b0d1d496f3580118628afc1057</guid></item><item><title>Namespace separation of symbols</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/8988295d/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;First off, fabulous project, thank you.&lt;/p&gt;
&lt;p&gt;I am having an issue with symbols defined in different namespaces, clashing.  For instance:&lt;/p&gt;
&lt;p&gt;namespace A {&lt;br/&gt;
    class X;&lt;br/&gt;
};&lt;/p&gt;
&lt;p&gt;namespace B {&lt;br/&gt;
    class X;&lt;br/&gt;
};&lt;/p&gt;
&lt;p&gt;A::X is not 'registered' as a fully qualified name in &lt;code&gt;_CppHeader.classes&lt;/code&gt;.  Hitting B::X in &lt;code&gt;_CppHeader.evaulate_class_stack&lt;/code&gt; triggers a name collision error.&lt;/p&gt;
&lt;p&gt;Happy to work with you on this, as I've been fixing bugs as I find them in my local 'fork' (I needed to implement a rudimentary preprocessor directive handler for our own needs, that I don't think would be of interest to most), but this one looked to require some more pervasive edits than I am ready to jump into.  (I would hope that just fully qualifying the symbol names would be sufficient, but it didn't seem to be quite that simple.)&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jason Smith</dc:creator><pubDate>Fri, 02 Sep 2016 00:31:16 -0000</pubDate><guid>https://sourceforge.net982710672aba7f3486469688b56049b7e44e3766</guid></item><item><title>Macro parsing and nameStack boundaries?</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/2a2e4e80/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p&gt;First off, what a great product. Thanks for all the work you’ve done on this.&lt;/p&gt;
&lt;p&gt;I’ve run into an issue parsing a particular style of programming we employ and hope you can offer a suggestion.&lt;/p&gt;
&lt;p&gt;In the example header below, we're using macros to inject code snippets at compile time.&lt;/p&gt;
&lt;p&gt;The issue I'm having is the token processor does not see a closing bracket (or semi-colon) at the end of the last macro so it attempts to process the first public enum as part of the nameStack created by the macro processing.&lt;/p&gt;
&lt;p&gt;E.g:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;Evaluating stack ['SCIOBJ_BEGIN_IFC_MAP', '(', 'SCIWizard', ')', 'SCIOBJ_CHAIN_IFC_MAP', '(', 'BASE_CLASS', ')', 'SCIOBJ_END_IFC_MAP', ':', 'typedef', 'enum', '_SomeMode']
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Instead of:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;Evaluating stack ['SCIOBJ_BEGIN_IFC_MAP', '(', 'SCIWizard', ')', 'SCIOBJ_CHAIN_IFC_MAP', '(', 'BASE_CLASS', ')', 'SCIOBJ_END_IFC_MAP’]
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The net result is the &lt;code&gt;_SomeMode&lt;/code&gt; enum gets swallowed and doesn’t appear anywhere in the resulting CppHeader class.&lt;/p&gt;
&lt;p&gt;Note adding a semi-colon after &lt;code&gt;MACRO_FUNCTION_END&lt;/code&gt; below does allow the parser to see the typedef enum, but I am not able to add this semi-colon to all the files that use this programming style.&lt;/p&gt;
&lt;p&gt;Is there anything I can do (short of modifying the header files) to get the CppHeaderParser to properly parse these headers?&lt;/p&gt;
&lt;p&gt;Thank you,&lt;/p&gt;
&lt;p&gt;// devon&lt;/p&gt;
&lt;p&gt;Example header file&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#define MY_CLASS_H_&lt;/span&gt;
&lt;span class="cp"&gt;#include “macro_header.h"&lt;/span&gt;

&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="nl"&gt;MyClass&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;MyGenericClass&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AnotherClass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MyClass&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="n"&gt;MyGenericClass&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AnotherClass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MyClass&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;BASE_CLASS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;MACRO_FUNCTION_BEGIN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AnotherClass&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;MACRO_FUNCTION_MAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BASE_CLASS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;MACRO_FUNCTION_END&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;— missing ';' creates parsing issue&lt;/span&gt;

&lt;span class="nl"&gt;public&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;_SomeMode&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;MODE_ONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;MODE_TWO&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;SomeMode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;SomeState&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;STATE_ONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;STATE_TWO&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In the macro_header.h file, we have these macros defined:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#define MACRO_FUNCTION_BEGIN(IfName) public: \&lt;/span&gt;
&lt;span class="cp"&gt;    virtual MyRetPtr&amp;lt;MyObj&amp;gt; queryInterface(const MyStr &amp;amp;sIfID) { \&lt;/span&gt;
&lt;span class="cp"&gt;        typedef IfName __ifNameBaseType; \&lt;/span&gt;
&lt;span class="cp"&gt;        if (sIfID == getIID&amp;lt;IfName&amp;gt;()) \&lt;/span&gt;
&lt;span class="cp"&gt;            return MyRetPtr&amp;lt;MyObj&amp;gt;(static_cast&amp;lt;IfName *&amp;gt;(this));&lt;/span&gt;

&lt;span class="cp"&gt;#define MACRO_FUNCTION_MAP(base) \&lt;/span&gt;
&lt;span class="cp"&gt;        MyRetPtr&amp;lt;MyObj&amp;gt; result = base::queryInterface(sIfID); \&lt;/span&gt;
&lt;span class="cp"&gt;        if (result) \&lt;/span&gt;
&lt;span class="cp"&gt;            return result;&lt;/span&gt;

&lt;span class="cp"&gt;#define MACRO_FUNCTION_END \&lt;/span&gt;
&lt;span class="cp"&gt;        if (sIfID == MYOBJ_INTERFACE) \&lt;/span&gt;
&lt;span class="cp"&gt;            return MyRetPtr&amp;lt;MyObj&amp;gt;(static_cast&amp;lt;MyObj *&amp;gt;(static_cast&amp;lt;__ifNameBaseType *&amp;gt;(this))); \&lt;/span&gt;
&lt;span class="cp"&gt;        \&lt;/span&gt;
&lt;span class="cp"&gt;        return NULL; \&lt;/span&gt;
&lt;span class="cp"&gt;    }&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;So, basically, after pre-processing we end up with:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#define MY_CLASS_H_&lt;/span&gt;
&lt;span class="cp"&gt;#include "macro_header.h"&lt;/span&gt;

&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="nl"&gt;MyClass&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;MyGenericClass&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AnotherClass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MyClass&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="n"&gt;MyGenericClass&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AnotherClass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MyClass&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;BASE_CLASS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;virtual&lt;/span&gt; &lt;span class="n"&gt;MyRetPtr&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyObj&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;queryInterface&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;MyStr&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;sIfID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="n"&gt;IfName&lt;/span&gt; &lt;span class="n"&gt;__ifNameBaseType&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sIfID&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;getIID&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IfName&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MyRetPtr&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyObj&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;static_cast&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IfName&lt;/span&gt; &lt;span class="o"&gt;*&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;MyRetPtr&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyObj&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;queryInterface&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sIfID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
           &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sIfID&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;MYOBJ_INTERFACE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MyRetPtr&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyObj&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;static_cast&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyObj&lt;/span&gt; &lt;span class="o"&gt;*&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;static_cast&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;__ifNameBaseType&lt;/span&gt; &lt;span class="o"&gt;*&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nl"&gt;public&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;typedef&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;_SomeMode&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;MODE_ONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;MODE_TWO&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="n"&gt;SomeMode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;SomeState&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;STATE_ONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;STATE_TWO&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Devon</dc:creator><pubDate>Thu, 13 Aug 2015 15:53:19 -0000</pubDate><guid>https://sourceforge.net9a47efb95c428ae05ebc17783fa835edce334c0a</guid></item><item><title>Templates support</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/d1ede545/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;I see, you are after "template&amp;lt;typename T_ObjectType=""&amp;gt;" or a parsed version of it.  If you look around line 2071 you will see that I actually strip out this part of the code&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;        # Strip out template declarations
        templateSectionsToSliceOut = []
        try:
            for m in re.finditer("template[\t ]*&amp;lt;[^&amp;gt;]*&amp;gt;", headerFileStr):
                start = m.start()
                # Search for the final '&amp;gt;' which may or may not be caught in the case of nexted &amp;lt;&amp;gt;'s
                for i in range(start, len(headerFileStr)):
                    if headerFileStr[i] == '&amp;lt;':
                        firstBracket = i
                        break
                ltgtStackCount = 1
                #Now look for fianl '&amp;gt;'
                for i in range(firstBracket + 1, len(headerFileStr)):
                    if headerFileStr[i] == '&amp;lt;':
                        ltgtStackCount += 1
                    elif headerFileStr[i] == '&amp;gt;':
                        ltgtStackCount -= 1
                    if ltgtStackCount == 0:
                        end = i
                        break
                templateSectionsToSliceOut.append((start, end))

            # Now strip out all instances of the template
            templateSectionsToSliceOut.reverse()
            for tslice in templateSectionsToSliceOut:
                newlines = headerFileStr[tslice[0]: tslice[1]].count("\n") * "\n" #Keep line numbers the same
                headerFileStr = headerFileStr[:tslice[0]] + newlines  + headerFileStr[tslice[1] + 1:]
        except:
            pass
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I do this because dealing with that broke other parts of the code and there wasnt a need for it.  I will consider adding this as something that gets parsed in a future release (God help me).&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jashua Cloutier</dc:creator><pubDate>Sat, 02 May 2015 18:06:35 -0000</pubDate><guid>https://sourceforge.net060e726e222f23e0319bc4ff37d6cd265e1c41d2</guid></item><item><title>Forward Declarations</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/6079576c/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Thank you :)&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">arya</dc:creator><pubDate>Fri, 01 May 2015 18:44:45 -0000</pubDate><guid>https://sourceforge.nete9784f1be6272955ddaecb7b367dd69bfc223861</guid></item><item><title>Templates support</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/d1ede545/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Yeah, thanks for your focusing on static libraries linkage issues, I found &lt;a class="" href="http://stackoverflow.com/questions/206272/hiding-private-data-members-c" rel="nofollow"&gt;this article&lt;/a&gt; with pimpl idiom description, that may help to fix such problems.&lt;/p&gt;
&lt;p&gt;About API... Let's I show on example:&lt;/p&gt;
&lt;p&gt;template&amp;lt;typename T_ObjectType=""&amp;gt;&lt;br /&gt;
HeapStorage&amp;lt;T_ObjectType&amp;gt; createStorage() {&lt;br /&gt;
    return HeapStorage&amp;lt;T_ObjectType&amp;gt;(heapAllocator());&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Return value of this class is specification of HeapStorage template class. I dependes from template argument with name T_ObjectType. So, for correct header convertion, I need some API to get template argument names - to create "template&amp;lt;typename T_ObjectType=""&amp;gt;" line (where template argument name is presented). Something like this:&lt;/p&gt;
&lt;p&gt;inCppClass&lt;span&gt;["methods"]&lt;/span&gt;&lt;span&gt;["public"]&lt;/span&gt;&lt;span&gt;["createStorage"]&lt;/span&gt;&lt;span&gt;["templateArgs"]&lt;/span&gt;&lt;span&gt;[0]&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Semenyakin Vladimir</dc:creator><pubDate>Mon, 27 Apr 2015 07:01:23 -0000</pubDate><guid>https://sourceforge.netbd40814ab1207220f8349f780cbdf64dbc3b9c27</guid></item><item><title>Templates support</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/d1ede545/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;First, if I understand correctly, your goal is to publish a .h file that has everything private stripped.  If this is the case, remember that if you have a compiled library using the private .h representation of the class, and someone else compiles code with the public version of the .h file an links against your compiled code, the program will have 2 different understandings of the size of your object and things could end badly.&lt;/p&gt;
&lt;p&gt;Looking at your code, I still dont understand exactly what you are having trouble with finding.  Are you having trouble accessing DVirtualDeviceRAM::HeapStorage?  Please specify what data you want to get pragmatically and how then I can help further&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jashua Cloutier</dc:creator><pubDate>Mon, 27 Apr 2015 01:04:59 -0000</pubDate><guid>https://sourceforge.netdc2bce7501bc3e5c8d968f899e7f0912ea255050</guid></item><item><title>Forward Declarations</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/6079576c/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Please try 139:231618db8dee.  You should see it works&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jashua Cloutier</dc:creator><pubDate>Mon, 27 Apr 2015 00:41:15 -0000</pubDate><guid>https://sourceforge.netec32563f6e53aa72f7e08bd274286f092bb1f604</guid></item><item><title>Templates support</title><link>https://sourceforge.net/p/cppheaderparser/discussion/837844/thread/d1ede545/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Thank you for fast answer!&lt;/p&gt;
&lt;p&gt;I attached python covertion code, input and output headers. There are inner classes in output, but, I think, it's not big problem. The problem is that I can't find API to get template argumetns of template classes and methods.&lt;/p&gt;
&lt;p&gt;In test cases I found test "class Lizzard_TestCase(unittest.TestCase):", where template key is used. But it's just flag there, not some structure, where detail template data is stored.&lt;/p&gt;
&lt;p&gt;P.S.: Sorry for my English.&lt;br /&gt;
P.P.S.: Sorry for my Python. It's not my native programing language&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Semenyakin Vladimir</dc:creator><pubDate>Sat, 25 Apr 2015 12:28:43 -0000</pubDate><guid>https://sourceforge.netb44bde13e144e13b990d870c2e48eccd9a4beefb</guid></item></channel></rss>