我有一个围绕a构建的模板类std::vector.看起来像...
template <class T>
class Vector {
public:
std::vector<T> vec;
// Constructors...
// Operator overloads...
// Methods...
// etc.
};
Run Code Online (Sandbox Code Playgroud)
我想创建一个派生模板类,ComplexVector它需要数据类型std::complex<T>,当然我想重用我在课堂上创建的方法,操作符重载等Vector.
问题是,似乎有两种方法可以做到这一点.
1)强制声明std::complex<T>为模板类型.
ComplexVector< std::complex<float> > myVec;
Run Code Online (Sandbox Code Playgroud)
2)ComplexVector仅使用标量类型声明,但然后将std::complex类型传递给Vector构造函数.
ComplexVector<float> myVec;
// Constructor
ComplexVector<T>::ComplexVector() : Vector< std::complex<T> >
Run Code Online (Sandbox Code Playgroud)
选项1在开发软件方面要简单得多,但对用户来说却很难看,而选项2对用户来说要好得多.我想做选项#2,但我担心它会如何运作.
如果我传递std::vector<T>给基类的构造函数,那只会改变构造函数的作用,还是整个模板会从类型T转到std::complex< T >?
如果它没有全部转换为std::complex<T>,这是否意味着我必须重载所有的方法Vector?