Nathan Jeffords
2012-May-07 23:03 UTC
[LLVMdev] Any way how to instantiate templates even when it is not necessary for the compilation?
Is the original definition of the template available in the XML file, not just the reference to the specific instantiations (i.e. IMyEnumerator<int>). On Mon, May 7, 2012 at 12:08 PM, Ondrej Kolacek <natris1 at gmail.com> wrote:> (another try from different mail account; I hope I was able to clarify > my issue better. ) > > Hello, > I am working on a tool which takes c++ header files of a C++ DLL 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. > > But new version of headers contains templates. Nothing fancy, usually > stuff like: > template <typename T> > IMyEnumerator { > virtual HRESULT GetCurrent(T*item) = 0; > }; > class IWhateverInterface { > virtual IMyEnumerator<int> & GetEnumerator() = 0; > }; > And here lies the problem - since the template IMyEnumerator<int> is > only used in this declaration, this template specialization is not > instantiated and the XML does not contain full CXXRecord of the class. > I however need to know the full structure of the type because I need > to generate the glue layer for the enumerator. > > 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). > > NOTE: one example of code which forces the instantiation is > class Dummy : public IMyEnumerator<int> > { > }; > > Thank you for any idea, > Ondrej >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120507/30bf67de/attachment.html>
Apparently Analagous Threads
- [LLVMdev] Any way how to instantiate templates even when it is not necessary for the compilation?
- [LLVMdev] Any way how to instantiate templates even when it is not necessary for the compilation?
- Question about __NSConstantString and __NSConstantString_tag
- instantiate record in single table inheritance
- Reload instance data on instantiate