模板类具有模板成员函数时遇到问题

时间:2012-10-20 13:49:23

标签: c++

在我对模板的实验中,我遇到了一个令人困惑的困境。我正在定义一个模板结构F,其默认参数为int。它有一个模板化的成员函数g。我在结构定义下面定义它。我认为这是正确的方法,但是,我收到一个错误。只有一个错误:

  

prog.cpp:9:62:error:包含'void F<的类的模板参数的默认参数> ::克()'

template <typename = int> struct F {

    template <typename> void g();

};

template <typename T = int> template <typename> void F<T>::g() {}

int main() {

    F<>f;

}

这很模糊。我无法完全理解它的含义。所以我尝试改变一些事情。我认为它是F定义的默认模板参数。所以我改变了:

template <typename = int> struct F {

template <typename T = int> struct F {

我也试过提供g模板参数:

template <typename T = int> template <typename U> void F<T>::g<U>() {}

但后来我收到了错误:

  

prog.cpp:9:67:错误:功能模板部分特化'g'不允许
  prog.cpp:9:67:错误:包含'void F :: g()'的类的模板参数的默认参数

我甚至尝试指定g是模板函数:

template <typename T = int> template <typename U> void F<T>::template g<U>() {}

但它没有帮助。我做错了什么?

1 个答案:

答案 0 :(得分:7)

默认模板参数只能用于函数声明,而不能用于定义:

template <typename T/* = int*/> template <typename> void F<T>::g() {}