小编Jim*_*lay的帖子

基础/派生模板类类型

我有一个围绕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

c++ inheritance templates c++11

2
推荐指数
2
解决办法
693
查看次数

标签 统计

c++ ×1

c++11 ×1

inheritance ×1

templates ×1