在我对模板的实验中,我遇到了一个令人困惑的困境。我正在定义一个模板结构F
,其默认参数是int
. 它有一个模板化的成员函数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 {
至
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>() {}
但这没有帮助。我究竟做错了什么?