假设我有一个带有方法模板的类:
//file: X.h
class X{
int x;
//... more members and non-template functions
template<typename T>
void foo(T t){ //Error, cannot define the method here. Declaration is okay
Y y = ...;
}
}
//file Y.h
class Y {
X x;
}
由于循环类依赖(foo 的主体依赖于 Y,Y 依赖于 X),我无法定义foo
我声明它的方法模板(请不要现在质疑设计)。
foo
那么,在这种情况下,该把定义放在哪里呢?我不能将它放到 .cpp 文件中的其他定义中,否则链接将失败。
我的解决方案是创建一个新的头文件,例如“X.hpp”,并且只在其中添加模板方法的定义。在这个文件中,我包括“Xh”和“Yh”。现在,每当我需要 X 类时,我只包含“X.hpp”,它又会包含其他必要的 h 文件。
所以我的问题是:这是正确/最好的方法吗?不知何故,我有一个仅用于单个方法模板定义的 .hpp 文件,但它似乎是循环类型依赖项的唯一可能方式。再次请:不要通过说“最好避免循环类型依赖”或类似的东西来质疑设计。问题是:如果我有这些依赖项,那么处理单一方法模板的最佳方式是什么。