c++ - 具有嵌套类的 C++ 循环依赖项
问题描述
我正在尝试生成我用 IDA 反汇编的类的头文件。但是,由于循环依赖,我得到了编译错误。对于常规类,我通过在一个单独的文件中声明它们来解决它,我首先将它们包含在内。问题是我不能在没有定义外部类的情况下声明内部类,这是问题所在。
一个示例类结构:
A类:
#include "B.h"
class A {
public:
class Nested {
public:
void foo(B::Nested &foo);
};
};
B类:
#include "A.h"
class B {
public:
class Nested {
public:
void foo(A::Nested &foo);
};
};
解决方案
使用模板。
class A {
public:
class Nested {
public:
template<class B>
void foo(typename B:: Nested &fo);
};
};
class B {
public:
class Nested {
public:
template<class A>
void foo(typename A:: Nested &fo);
};
};
template<>
void A::Nested::foo<B>(B::Nested & fo){
}
template<>
void B::Nested::foo<A>(A::Nested & fo){
}
例如(此处模板已上移,因此不必在每个函数调用中指定类型。)
#include <iostream>
class A {
public:
template <class B>
class Nested {
public:
std::string name() const { return "a"; }
void foo(typename B:: template Nested<A> &fo);
};
};
class B {
public:
template <class A>
class Nested {
public:
std::string name() const { return "b"; }
void foo(typename A:: template Nested<B> &fo);
};
};
template<>
void A::Nested<B>::foo(B::Nested<A> & fo){
std::cout << "A::Nested " << fo.name() << '\n';
}
template<>
void B::Nested<A>::foo(A::Nested<B> & fo){
std::cout << "B::Nested " << fo.name() << '\n';
}
int main()
{
A::Nested<B> a;
B::Nested<A> b;
a.foo(b);
b.foo(a);
}
推荐阅读
- elasticsearch - Kibana 可以同步到 Elastic App Search 吗?
- python-3.x - 描述 EFS 文件系统的 Python 脚本
- java - hashmap keySet() 方法只返回第一个元素
- javascript - 无法读取未定义的属性消息。(在this.message)
- c++ - 如何在自己的编程语言中实现#include 函数
- excel - Excel XY 图表五彩线
- sql-server - SQL Server 中的舍入时间
- jekyll - 如何使用 Liquid“样本”过滤器在 Jekyll 中生成随机帖子?
- javascript - uwt.js(Twitter 跟踪像素?)导致 20 秒的加载时间
- npm - 无法从“npm install -g npm@latest”命令升级 npm