How would clang know what type to instantiate it with? Would it make sense to replace T with object, or create a CSharp generic instead in you translation process?<br><br><div class="gmail_quote">On Fri, May 4, 2012 at 8:43 AM,  <span dir="ltr"><<a href="mailto:natris@centrum.cz" target="_blank">natris@centrum.cz</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
I am working on a tool which takes c++ header files and based on interfaces defined in them generates csharp classes and glue layer for interop. For analyzing the c++ code I am currently using clang, which parses the headers and writes output into xml via -ast-print-xml (yes, this unfortunately means that it is a very old version of clang). I then use these xml files to generate the csharp code. Since the header files are written in consistent style, it works pretty well.<br>

 <br>
But new version of headers contains templates. Nothing fancy, usually stuff like:<br>
template<br>
IMyEnumerator {<br>
virtual HRESULT GetCurrent(T*item) = 0;<br>
};<br>
class IWhateverInterface {<br>
virtual IMyEnumerator & GetEnumerator() = 0;<br>
};<br>
And here lies the problem - since the template IMyEnumerator does not have to be instantiated for clang to compile the headers, this Specialization is not instantiated and the XML does not contain full CXXRecord of the class. I however need to know the full structure because I need to generate the glue layer for the enumerator.<br>

 <br>
It seems to me that this would be quite a common problem for similar tools and someone might have stumbled upon it already, and because of this I'd like to ask: is there any clean way how to force instantiation of templates that do not strictly have to be instantiated? Because if it isn't, this means that I will either have to somehow analyze the headers and generate code which forces the instantiation (which is not really trivial) or try to hack the code somehow to force the instantiation (probably possible but certainly not pretty).<br>

 <br>
Thank you,<br>
Ondrej<br>
 <br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</blockquote></div><br>