class ReadableDataset
{
public:
virtual void SayReadableDataset() const = 0;
};
template<class Base>
class EditableDataset: public Base
{
public:
virtual void SayEditableDataset() const = 0;
};
template<class Base>
class StatisticalDataset: public Base
{
public:
virtual void SayStatisticalDataset() const = 0;
};
class CDatasetImpl: public StatisticalDataset<EditableDataset<ReadableDataset> >
{
public:
virtual void SayReadableDataset() const
{
std::cout << "SayReadableDataset" << std::endl;
};
virtual void SayEditableDataset() const
{
std::cout << "SayEditableDataset" << std::endl;
};
virtual void SayStatisticalDataset() const
{
std::cout << "SayStatisticalDataset" << std::endl;
};
};
template<class T>
void statistic(const StatisticalDataset<T>& x)
{
x.SayReadableDataset();
x.SayStatisticalDataset();
}
template<class T>
void edit(EditableDataset<T>& x)
{
x.SayReadableDataset();
x.SayEditableDataset();
}
void read(const ReadableDataset& x)
{
x.SayReadableDataset();
}
int main()
{
CDatasetImpl a;
read(a);
edit(a);
statistic(a);
return 0;
}
#pragma warning(push)
#pragma warning(disable : WARNING NUMBER )
// тут любой код источник warning'a
// или можно includ'ить хидеры
#include<file.hpp>
#pragma warning(pop)