使用用户定义的类作为参数进行模板化

时间:2013-03-18 23:58:37

标签: c++ templating

我在模板和合成式编码方面遇到了一些麻烦。我有一个使用* this参数在另一个构造函数内创建的对象。对不起,如果我不清楚的话。代码如下:

在outer.h文件中:

class outer {
  public:
    outer(int w, int l);
    int getWidth();
    int getLength();
  private:
    inner<outer> test(*this);
    int width;
    int length;
};

outer::outer(int w, int l) {
  width = w;
  length = l;
}

int outer::getLength() {
  return length;
}

在inner.h文件中

template<typename T>
class inner {
  public:
    inner(T &name);
  private:
    int top;
    int bot;
};

template<typename T>
inner<T>::inner(T &name) {
    top = name.getLength() /2;
    bot = -name.getLength() / 2;
}

我不知道是否允许这样做,因为我无法在网上找到解决此问题的任何内容。编译器在outer.h中遇到了* this语句的问题。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

如果您使用的是C ++ 03,则必须在构造函数中执行初始赋值。

class outer {
  public:
    outer(int w, int l);
    int getWidth();
    int getLength();
  private:
    // Member variables are initialized in the order they are declared here.
    int width;
    int length;
    inner<outer> test;
};

outer::outer(int w, int l)
  : width(w)
  , length(l)
  , test(*this)
{
}

编辑:Kerrek SB还注意到您需要更改变量的顺序。它们按照您在课堂中声明它们的顺序初始化,并且最后要初始化test 需要,因此其他变量已初始化。