Generic programming: 1 single file (泛型编程:声明与实现放在一起) 模版类
Y.h: class template declaration & implementation (in One File)
because some compliers cannot compile them separately.
Non-Generic programming: 2 separate files (非泛型编程:声明与实现分离)
X.h: class declaration
X.cpp: class implementation into two separate files.