C++类模板继承模板本身,有偿

问题遇到的现象和发生背景

我要做一个自定义的链表功能,现在定义了链表节点如下:

template<typename T> class ChainNode
{
public:
  ChainNode() content(NULL) {};
  ChainNode(const ChainNode<T>& toCopy) : content( new T(*toCopy.content)) {}
  ChainNode(ChainNode<T>&& toMove) : content(toMove.content) {toMove.content = NULL;}
  ChainNode(const T& input) : content(new T(input)) {};
  ~ChainNode() {if(content != NULL) delete content;};
protected:
  T* content; //用于生成动态内存
};

但是想了想觉得在ChainNode<T>::content这个变量有点无意义,每次生成都需要拷贝输入,如果用作模板的类型拷贝成本很高就会很被动。至于拷贝构造和右值拷贝这些都是一样的,无论用什么方式新建ChainNode<T>都会比直接新建T多一次拷贝,以一个Point类型为例:

//! 用作节点的模板
class Point{
public: 
  Point(double x, double y, double z); 
  double X,Y,Z;
};

//! 直接定义Point
Point test(1.1,2.2,3.3);
//! 定义ChainNode<Point>
ChainNode<Point> testNode(Point(1.1,2.2,3.3)); //多出比直接定义Point多出一次临时变量的拷贝
我的解答思路和尝试过的方法

想问的问题是,有没有可能通过继承的方式,让类模板ChainNode<T>可以直接使用template T的构造函数:

//! 在链表里插入一个新的节点
...
ChainNode<Point> newNode(1.1,2.2,3.3);
...

为了实现这个目的,我在把ChainNode<T>的定义调整为:

template<typename T> class ChainNode : public T
{
public:
  ChainNode() {};
  ChainNode(const ChainNode<T>& toCopy) : T(toCpoy) {}
  ChainNode(ChainNode<T>&& toMove) : T(toCopy) {}
  ChainNode(const T& input) : T(input) {};
  ~ChainNode() {};
protected:
  T* content = static_cast<T*>(this);
};

ChainNode<int> intNode; //报错C2516
ChainNode<Point> pointNode(1.1,2.2,3.3); //报错无对应构造函数
我想要达到的结果

现在就卡在这一步:

  1. 模板T不使用系统类型double,int等,可以成功通过编译;如果使用double,int等类型,则会报出_C2516:是非法基类_的编译错误;
  2. 还是没有办法在创建对象的时候直接调取基类,也就是模板类的构造函数。

希望各位专家帮忙指点一二。