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

标签 c++ class templates constructor

我有一个自定义模板,我想在我的 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 的错误:

error: expected identifier before numeric constant

我知道这不是我们在类中构建此类内容的方式。这样做的正确错误是什么?假设我不能使用新的 C++11 标准。

最佳答案

“假设我不能使用新的 C++11 标准”——在这种情况下,您不能在声明中初始化非静态成员。您必须在构造函数中执行此操作:

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

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

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

关于c++ - 在 C++ 类中构造自定义模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237236/

相关文章:

java - Java中如何找到给定类的所有子类?

java - java中的对象不会在主类中执行

c++ - 将类(mixins)的功能与歧义调用结合起来

c++ - 将 vector 转换为数组。如何释放内存?

c++ - 与 MySQL 服务器通信的最佳方式是什么?

c++ - 如何在成员函数内将函数及其参数传递给 std::async

php - wordpress 博客信息 ('template_directory' );使用 Twig 解析为字符串

c++ - 新建 POD 的 c++ 对象(普通旧数据类型)

class - 在 Swift 中比较一个对象的两个实例

c++ - 使用无效方法实例化类模板