gpt4 book ai didi

c++ - 嵌套模板类的前向声明

转载 作者:行者123 更新时间:2023-11-28 03:05:01 24 4
gpt4 key购买 nike

我有一个类似这样的类:

template< typename T, typename Allocator >
class MemMngList : protected LockFreeMemMng<Node, Link>
{
public:
typedef T Type;
typedef Allocator AllocatorType;

struct Node : public LockFreeNode
{
public:
struct Link : protected LockFreeLink< Node >
{
....

问题是我在 LockFreeMemMng('Node': undeclared identifier...) 的模板参数中遇到错误。

如何在 MemMngList 实现上面使用 NodeLink 的前向声明?

template< typename T, typename Allocator >
class MemMngList;

//Forward Declaration of Node and Link

最佳答案

您不能在类声明中转发声明某些内容。如果你想访问私有(private)成员,你需要将它移动到类(class)之外的某个地方并使用 friend :

template <typename T, typename Allocator>
struct NodeType : public LockFreeNode< NodeType<T,Allocator> >
{
...

template <typename,typename>
friend class MemMngList;
};

template <typename T, typename Allocator>
struct LinkType : public LockFreeLink< NodeType <T,Allocator> >
{
...

template <typename,typename>
friend class MemMngList;
};

template< typename T, typename Allocator >
class MemMngList : protected LockFreeMemMng< NodeType <T,Allocator> , LinkType <T,Allocator> >
{
typedef NodeType <T,Allocator> Node;
typedef LinkType <T,Allocator> Link;

...
};

关于c++ - 嵌套模板类的前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19935728/

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