Consider a templated class that I've created called myList
, it basically extends the std::list
object provided in the C++ STL. I've overridden a few functions such as size()
, front()
and back()
but have not touched the sort()
function that is provided with std::list
.
Basically, I want to be able to sort myList
, consider my decorator implementation:
#import "myList.h"
template <typename T>
class myListDecorator : public myList<T> {
public:
myListDecorator() : m_list(myList<T>()){}
myListDecorator(const myList<T> &my_list) {
m_list = my_list.sort();
}
private:
myList<T> m_list;
};
Whenever I create a myList
(in these case using objects of type double
) I get the following error:
Candidate function not viable: no known conversion from 'const myList<double>' to 'std::list<double, std::allocator<double>>' for object argument
.
Do I have to override the sort()
function in myList
and implement my own sort for this to work?
EDIT:
A few of the comments pointed out how confusing it was having effectively two myList
objects in this class. I've updated my code to be more 'correct'/'best practice'. It now does what I intended it to do and is much tidier:
#include "myList.h"
template <typename T>
class myListDecorator : public myList<T> {
public:
myListDecorator() : myList<T>(myList<T>()){}
myListDecorator(const myList<T> &my_list) : myList<T>(my_list){
this->sort();
}
};