Boost logo

Boost :

Subject: Re: [boost] virtual function templates
From: strasser_at_[hidden]
Date: 2010-02-20 06:49:26


Zitat von joel falcou <joel.falcou_at_[hidden]>:
>> real virtual function templates are obviously not possible without
>> a JIT-compiler, but if all derived types are known to the base
>> type, something like the following is. I've used a non-generic form
>> of this a couple of times:
> I'm a bit amiss on how is this different from Polymorphic Function
> Obejct, aka Callable Entity with template operator() ?

I've never used Fusion.Functional but at first sight I can't even
figure out what they have in common.

the code I tried to emulate, if C++ had runtime generics, is the following:

struct base{
   template<class OutputIterator>
   virtual void f(OutputIterator);
};

struct derived : base{
   template<class OutputIterator>
   virtual void f(OutputIterator);
};

base *b=new derived;
b->f(...); //calls derived::f

how do you do something like that with Polymorphic Function Objects?

Zitat von Andrey Semashev <andrey.semashev_at_[hidden]>:
> Interesting. I had a need in such a thing a couple of times. Is the
> code available somewhere?

I have no generic implementation. what it could look like(pseudo-code):

template<class T1,...>
class enable_vtemplate{
protected:
   typedef mpl::vector<T1,...> vtemplate_types;
   virtual std::size_t vtemplate_index() = 0;
};

#define BOOST_SUPPORT_VTEMPLATE(T) \
   virtual std::size_t vtemplate_index(){
     //return index of T in vector vtemplate_types
   }

#define BOOST_VTEMPALTE(F,TARGS,ARGS) \
   switch(this->vtemplate_index()){
     case 0: return static_cast<T1 *>(this)->template F<TARGS>(ARGS);
     ...
   }


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk