在具有模板成员功能的模板类方面遇到麻烦

Having trouble with template classes having template member functions

本文关键字:方面 麻烦 遇到 成员 功能      更新时间:2023-10-16

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

prog.cpp:9:62:错误:类模板参数的默认参数,用于封闭'void f<> :: g()'

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 {

to

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>() {}

,但这无济于事。我在做什么错?

默认模板参数必须仅在函数声明上使用,而不是在定义上:

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