After knowing that C++ template is actually marco, feel kind of disappointed.
I implemented a generic double linked list to feel what it is like in C++, I have done that in Java.
C++ code is redundant, wherever your class or methods have something to do with the template, need template <class name>. And also C++ template is good for container class only. Your template methods should not touch anything inside your generic part, because this may get you into runtime error.
For example, you have a generic method that use generic class T, and then try to call T->print(), if T has define print(), everything is just fine, otherwise you will get runtime error. Whereas Java have interface to restrict the signature of a generic class. C++ may use inheritance to over come this but it won’t be type safe.
Not to mention C++ multiple inheritance may lead to diamond problem. That is exactly why I learned C, C#, Java before C++, because in my opinion C++ is difficult to use and clumsy. But even so, you will eventually need to use C++ someday if you are not obsessed to a paticular language. But learning C++ is still very funny, it will be easier if you have good memory, but sadly my memory is not so good.