包含带参数的另一个模板类的模板参数的类成员

时间:2017-04-10 21:16:29

标签: c++ templates

我想要一个指向C的C的指针(下面的示例)。我正在尝试使用g ++ 3.4.0编译类似的类,但我收到错误消息:“b未在此范围内声明”。我如何在C ++中实现这一目标?

main.cpp中:

template <class T> class B;
template <class T> class C;

template <class T>
class A
{
private:
    T* first;
    B<C<T>>* b;
};

template <class T>
class B
{
};

template <class T>
class C
{
};

2 个答案:

答案 0 :(得分:1)

在1998和2003版本的C ++中,要关闭两个模板参数列表,或模板参数列表和C ++样式转换,必须在>个字符之间放置一个空格,以保持标记化将它们解析为>>令牌。

std::vector<std::vector<int> > matrix;
std::vector<double> v = static_cast<std::vector<double> >(myobj);

语法指定参数列表或强制类型以>标记结尾,并且不会将>>标记识别为其中两个。

在C ++ 11中,添加了一个规则,用于在模板参数列表内和括号外部用>>个令牌替换>个令牌。 (所以如果你真的想要右移,你必须使用括号。)

std::array<double, (16>>3)> arr;

答案 1 :(得分:0)

感谢人们帮助我解决这个问题,我找到了解决方案。这似乎是不必要的,但我只需在&gt;之间添加一个空格,如下所示:

B<C<T> >* b;

(我不确定原因。我最初的想法是,它可能被误认为是&gt;&gt;运算符。)