A
Adrian
Below is an example of the problem I am having. I don't understand how
I can get the compiler to see deriv &operator=(const T &rhs).
I am sure this is a common problem - any suggestions?
#include <iostream>
#include <vector>
struct base
{
virtual ~base()=0 {};
};
template<class T>
struct deriv : public base
{
deriv(): data_(0) {};
deriv(const T &data): data_(data) {};
deriv &operator=(const T &rhs) { data_=rhs; return (*this); }
deriv &operator=(const deriv &rhs)
{ data_=rhs.data_; return (*this); }
T data_;
};
struct container
{
base &operator[](int i) { return *(data_); };
std::vector<base *> data_;
};
void fill_cont(container &data);
int main(int argc, char *argv[])
{
container data;
fill_cont(data);
std::cout << "data[0]=" << typeid(data[0]).name() << std::endl;
// output: data[0]=struct deriv<int>
data[0]=12445;
std::cout << "data[1]=" << typeid(data[1]).name() << std::endl;
// output: data[1]=struct deriv<double>
data[1]=4.5667;
std::cout << "data[2]=" << typeid(data[2]).name() << std::endl;
// output: data[2]=struct deriv<char *>
data[2]="test";
return 0;
}
void fill_cont(container &data)
{
data.data_.push_back(new deriv<int>());
data.data_.push_back(new deriv<double>());
data.data_.push_back(new deriv<char *>());
}
I can get the compiler to see deriv &operator=(const T &rhs).
I am sure this is a common problem - any suggestions?
#include <iostream>
#include <vector>
struct base
{
virtual ~base()=0 {};
};
template<class T>
struct deriv : public base
{
deriv(): data_(0) {};
deriv(const T &data): data_(data) {};
deriv &operator=(const T &rhs) { data_=rhs; return (*this); }
deriv &operator=(const deriv &rhs)
{ data_=rhs.data_; return (*this); }
T data_;
};
struct container
{
base &operator[](int i) { return *(data_); };
std::vector<base *> data_;
};
void fill_cont(container &data);
int main(int argc, char *argv[])
{
container data;
fill_cont(data);
std::cout << "data[0]=" << typeid(data[0]).name() << std::endl;
// output: data[0]=struct deriv<int>
data[0]=12445;
std::cout << "data[1]=" << typeid(data[1]).name() << std::endl;
// output: data[1]=struct deriv<double>
data[1]=4.5667;
std::cout << "data[2]=" << typeid(data[2]).name() << std::endl;
// output: data[2]=struct deriv<char *>
data[2]="test";
return 0;
}
void fill_cont(container &data)
{
data.data_.push_back(new deriv<int>());
data.data_.push_back(new deriv<double>());
data.data_.push_back(new deriv<char *>());
}