gpt4 book ai didi

c++ - 模板类的友元模板函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:29 24 4
gpt4 key购买 nike

我有以下简化代码:

template <class T>
class A
{
public:
template <class U>
static U foo(T* p)
{
p;
return U();
}
};

class B
{
/*template <class T>
template <class U>
friend U A<T>::foo<U>(T*);*/
friend B A<B>::foo<B>(B*);
B()
{}
public:
};
...
A<B>::foo<B>(nullptr);

而且效果很好。但是我没有做到的事情被评论了:

/*template <class T>
template <class U>
friend U A<T>::foo<U>(T*);*/

我不知道我应该使用什么语法来让它工作。所以我需要将我的 friend 声明推广到所有可能的类型。我尝试了很多语法变体,但都没有成功。有人能指出我应该写什么而不是我的评论代码才能使它工作吗?谢谢!

最佳答案

你要找的是

template <class T>
template <class U>
friend U A<T>::foo(T*);

IdeOne.com 上的作品如下

#include <iostream>

template <class T>
class A
{
public:
template <class U>
static U foo(T* p)
{
p;
return U();
}
};

class B
{
template <class T>
template <class U>
friend U A<T>::foo(T*);

B() {}

public:
void hello() const
{
std::cout << "I'm a B!" << std::endl;
}
};

int main(int, char*[])
{
A<B>::foo<B>(NULL).hello();
}

关于c++ - 模板类的友元模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758757/

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