如何定义具有未命名类型名称的模板成员函数?

how to define template member function with unnamed typename?

提问人:RobsBiz 提问时间:8/14/2023 最后编辑:康桓瑋RobsBiz 更新时间:8/14/2023 访问量:47

问:

我在使用未命名的类型名定义模板成员函数时遇到了问题。

代码在下面。

#include <iostream>
#include <type_traits>

class A
{};

class B : public A
{};

class C
{
  public:
  template <typename T,
    typename std::enable_if<std::is_base_of<A, T>::value, T>::type* = nullptr>
    void do_stuff(T& t);
};

template <typename T>
void C::do_stuff(T& t)
{
}

int main(){  
  B b;
  C c;
  c.do_stuff<B>(b);
}

编译此时

/home/insights/insights.cpp:19:9: error: out-of-line definition of 'do_stuff' does not match any declaration in 'C'
void C::do_stuff(T& t)
        ^~~~~~~~
1 error generated.

如何实现?

C++ 模板 sfinae

评论

2赞 songyuanyao 8/14/2023
template <typename T, typename std::enable_if<std::is_base_of<A, T>::value, T>::type*> void C::do_stuff(T& t) {}.
0赞 RobsBiz 8/14/2023
@songyuanyao它正在工作,谢谢。
0赞 user17732522 8/14/2023
名称无关紧要。你只需要给出类型,如果你愿意,你可以发明任何名字。
0赞 463035818_is_not_an_ai 8/14/2023
就像 和 是两个不同的函数一样,u 与您声明的模板不同。仅仅因为参数没有名称并不意味着您可以放弃它void foo(int x,int)void foo(int x)template <typename T> void C::do_stuff(T& t)

答: 暂无答案