相关疑难解决方法(0)

如何在 C++ 中声明/定义相互依赖的模板?

通常在 C++ 中,当我需要类之间的相互依赖性时,我在头文件中使用前向声明,然后在每个 cpp 文件中包含这两个头文件。

然而,当使用模板时,这种方法就会失效。因为模板必须完全位于头文件中(不包括当我将代码放入 cpp 并枚举template class A<T>;每个受支持的情况时的情况T- 这并不总是可行,例如何时T是 lambda)。

那么有没有办法在 C++ 中声明/定义相互依赖的模板呢?

代码示例

template<typename T> struct B;
template<typename T> struct A {
  void RunA(B<T> *pB) {
    // need to do something to B here
  }
};

template<typename T> struct B {
  void RunB(A<T> *pA) {
    // need to do something to A here
  }
};
Run Code Online (Sandbox Code Playgroud)

如果我开始对Bin做一些事情,我想,我会得到一个“缺少定义”错误,因为在编译RunA()时只有 B 的前向声明可用。RunA()

也许有一些技巧来组织头文件,例如将每个头拆分为类定义和方法定义文件,然后以某种奇特的方式包含它们。或者也许可以通过第三/第四类来完成某些事情。但我无法想象具体如何做到这一点。

C++11/14/17 都可以(具体来说,它是 MSVC++2017,工具集 v141)。

c++ templates compilation include c-preprocessor

10
推荐指数
1
解决办法
1173
查看次数

标签 统计

c++ ×1

c-preprocessor ×1

compilation ×1

include ×1

templates ×1