Anyone with experience on embedding CINT into a C++ app?
-
29-09-2019 - |
Question
I'm talking about ROOT's CINT.
I've been developing a game in c++ wich uses Python for programming the AI. As much as I love Python, and how easy it makes programming the AI (generators and FP are really sexy), it makes non trivial algorythms run so slow.
Then I remembered I read somewhere about CINT, and how it can be embedable. Now I need your help to decide if implement CINT as an alternate scripting system. With python I use Boost::Python, wich makes it almost unpainfull to expose classes and objects once you get used to it. Is there such ease with CINT?
Thank you.
Solution
I've written classes compiled against Root, and then accessed them directly in the interpreter. That's easy, though all such classes are expected to derive from TObject
. What I don't know is if that is a cint requirement or a ROOT requirement. you might be best off asking on the RootTalk CINT Support forum
To address the questions in the comments:
- The derivation from
TObject
can be second hand: your classes can be derived from something derived fromTObject
, it just has to be a TObject. - Root provides a tool (
makecint
) and some macros (ClassDef
andClassImp
) to support integrating your code with the interpreted execution environment: write your clas deriving it fromTObject
; include theClassDef
macro in the header and theClassImp
macro in the source file; runmakecint
over the code to generate all the tedious integration nonesense, then compile your code and the generated code to a shared object (or, I presume, a dll on a windows box); start the interpreter; load the library with.L
; and your class is fully integrated with the interpreted environment (tab completion will work and all that). The build can be automated withmake
(and presumable other tools). ##Again,## I don't know how much of this belongs to ROOT and how much to cint. But it is all open source, so you can snag and adapt what you need.