我正在构建一个仅包含标头的库,并且通过执行类似于代码显示的操作解决了一些循环依赖问题。
基本上,我创建了一个私有模板实现,它允许我使用前向声明的类型,就好像它们被包含而不是前向声明一样。
我的方法有什么危险吗?
有没有性能损失? (库的主要关注点是性能——真实的代码有明确的inline
建议)
额外的问题:对编译时间有影响(正面还是负面)?
// Entity.h
#include "Component.h"
struct Entity { void a() { ... } }
// Component.h
struct Entity; // forward-declaration
class Component
{
Entity& entity;
template<class T = Entity> void doAImpl() { static_cast<T&>(entity).a(); }
public:
// void notWorking() { entity.a(); } <- this does not compile
void doA() { doAImpl(); }
}