在c++类中构造自定义模板

Construct custom template in C++ class

本文关键字:自定义 c++      更新时间:2023-10-16

我有一个自定义模板,我想在我的c++类中初始化。我想直接设置它的大小

模板类vector3d.hh

template <typename T>
class vector3d {
public:
vector3d(size_t d1=0, size_t d2=0, size_t d3=0, T const & t=T()) :
    d1(d1), d2(d2), d3(d3), data(d1*d2*d3, t){}
T & operator()(size_t i, size_t j, size_t k) {
    return data[i*d2*d3 + j*d3 + k];
}
T const & operator()(size_t i, size_t j, size_t k) const {
    return data[i*d2*d3 + j*d3 + k];
}
private:
    size_t d1,d2,d3;
    std::vector<T> data;
};

我想在其中初始化模板变量的类:

#include "vector3d.hh"
class foo{
 public:
  vector3d<int> testvector(1000,2000,3000);
}

但是试图编译这段代码会生成以下错误指向我初始化的vector3d:

错误:数值常量前的期望标识符

我知道这不是我们在类中构造这些东西的方式。这样做的正确的无错误是什么?假设我不能使用新的c++ 11标准。

"假设我不能使用新的c++ 11标准"——在这种情况下,你不能在非静态成员的声明中初始化它们。必须在构造函数中完成:

vector3d<int> testvector;
foo() : testvector(1000,2000,3000) {}

在现代c++中,您可以在那里初始化它,但不能使用()。类内初始化只能使用={}:

vector3d<int> testvector{1000,2000,3000};