gpt4 book ai didi

c++ - 在使用具有模板成员函数的模板类时遇到问题

转载 作者:搜寻专家 更新时间:2023-10-31 00:00:32 27 4
gpt4 key购买 nike

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

prog.cpp:9:62: error: default argument for template parameter for class enclosing '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: error: function template partial specialization 'g' is not allowed
prog.cpp:9:67: error: default argument for template parameter for class enclosing '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() {}

关于c++ - 在使用具有模板成员函数的模板类时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com