vendredi 12 novembre 2021

Heterogenous vectors of pointers. How to call functions

I would like to create a heterogeneous structure to store pointers to some classes so that I can loop through it and call a write() function.

The idea is this:

#include <boost/variant.hpp>
#include <vector>

template< typename T>
class A
{
    public:
        A(){}
        ~A(){}

        void write();

    private:
        T data;
};

template< typename T>
void A<T>::write()
{
    std::cout << data << std::endl;
}

int main()
{
   A<int> one;
   A<double> two;

   typedef boost::variant<A<int>*, A<double>* > registry;
   std::vector<registry> v;


   v.push_back(&one);
   v.push_back(&two);

   for(unsigned int i =0; i< v.size(); i++)
   {
       v[i]->write();
   }

}

However, this code does not compile. Showing the error:

error: base operand of ‘->’ has non-pointer type ‘__gnu_cxx::__alloc_traits<std::allocator<boost::variant<A<int>*, A<double>*> > >::value_type {aka boost::variant<A<int>*, A<double>*>}’
         v[i]->write();

How can I fix this? I would also appreciate ideas on the implementation

Aucun commentaire:

Enregistrer un commentaire