访问模板化基类的模板化方法

时间:2012-11-13 16:28:28

标签: c++ qt templates gcc4

  

可能重复:
  Error calling template method in “templated-base-class”

以下代码使用MSVC10编译,但不使用gcc 4.2.1:

编译
template<class BaseQNativeWindow>
class NativeWindow : public BaseQNativeWindow
{
public:
  NativeWindow(AIPanelPlatformWindow handle) : BaseQNativeWindow(handle)
  {}

protected:
  virtual void closeEvent(QCloseEvent *e)
  {
    QList<QWidget *> childrenList;
    childrenList = BaseQNativeWindow::findChildren< QWidget * >(); // GCC ERROR
    foreach(QWidget *child, childrenList)
    {
      child->close();
    }
  }
};

这就是gcc抱怨的:

error: expected primary-expression before ‘*’ token  
error: expected primary-expression before ‘>’ token  
error: expected primary-expression before ‘)’ token  

findChildrenBaseQNativeWindow必须提供的模板化方法。似乎gcc假设findChildren即使在知道BaseQNativeWiindow类型之前也不是模板。有谁能解释一下?

感谢。

1 个答案:

答案 0 :(得分:5)

你必须说:

BaseQNativeWindow::template findChildren< QWidget * >()
//                 ^^^^^^^^

由于findChildren是一个从属名称,因此必须明确其含义。