Re: [ROOT] adding a template class in ROOT with cint

From: Fons Rademakers (Fons.Rademakers@cern.ch)
Date: Mon Feb 12 2001 - 16:06:58 MET


Hi Benoit,

  here is a correct version of you example:

//---------------------- test.h
#ifndef TEST_H
#define TEST_H

#include <iostream>
#include <TObject.h>

using namespace std;

template<class Type> class Test : public TObject {

private:
  Type _x;

public:
  void Print(){cout << _x << endl;}
  Test(){};
  Test(Type x){_x=x;}
  ~Test(){};
  ClassDefT(Test<Type>,0)
};

ClassDefT2(Test,Type)

#endif

//-------------------- test.cxx
#include "test.h"

ClassImpT(Test,Type)

// explicit template instantiation of the version specified in LinkDef.h
template Test<int>;

//-------------------- LinkDef.h
#ifdef __CINT__

#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;

#pragma link C++ class Test<int>;

#endif

//-------------------- Build and execute
$ rootcint -f testDict.cxx -c test.h LinkDef.h
$ g++ -g -fPIC `root-config --cflags` -c test.cxx
$ g++ -g -fPIC `root-config --cflags` -c testDict.cxx
$ g++ -shared -o libTest.so test.o testDict.o

$ root
root [0] gSystem->Load("libTest.so");
root [1] Test<int> t(10)
root [2] t.Print()
10


Cheers, Fons.


Benoit Revenu wrote:
> 
> Hi,
> 
> I'm trying to add a template class in ROOT using cint but with no succes.
> I had a look at the roottalk but I couldn't find any satisfactory answer.
> Where can I find a complete correct example for that ?
> 
> For information, here is my code:
> 
> test.h file :
> ---------------------------------------
> #ifndef TEST_H
> #define TEST_H
> 
> #include <iostream>
> #include "root.h"
> 
> using namespace std;
> 
> template<class Type> class Test : public TObject
> {
> 
> private:
> 
>   Type _x;
> 
> public:
> 
> 
>   void Print(){cout << _x << endl;}
>   Test(){};
>   Test(Type x){_x=x;}
>   ~Test(){};
>   ClassDef(Test,0)
> 
>     };
> 
> #endif

-- 
Org:    CERN, European Laboratory for Particle Physics.
Mail:   1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
WWW:    http://root.cern.ch/~rdm/            Fax:   +41 22 7677910



This archive was generated by hypermail 2b29 : Fri Jun 08 2001 - 11:51:06 MEST