项目之间的c++ header

标签 c++ clr llvm header-files

我在用 C++ 编写应用程序时遇到了麻烦。我有两个项目。项目A是普通的c++项目,项目B是带clr支持的c++项目。项目 A 包含使用 LLVM 框架 header 的类。项目 B 包含项目 A 的某些类的托管包装器。我可以在项目 B 中使用项目 A 中的类而不包含它们的 header 吗?

原因是这样的。当我在项目 B 中包含项目 A 的类 header 时,我还需要指定项目 A 的 header 使用的框架库,但 LLVM 框架无法与 clr 支持合作。我无法将框架包含从 header 移动到 cpp 文件。我该如何解决?

最佳答案

只要您不在项目 A 中使用依赖于 LLVM header 的模板,就可以。您始终可以转发声明您在项目 A header 中使用的类型,并将实际 header 包含在 cpp 文件中。

假设您要使用一个名为 llvm_type 的类型这是由 LLVM 编译器的库定义的类。在 projectA.h你可以这样做:

class llvm_type;

class MyAPrjClass {
public:
    void myMethod (llvm_type x, int y);
}

然后在你的projectA.cpp您包括 LLVM header :

#include <llvm_type.h>

void MyAPrjClass:: myMethod (llvm_type x, int y)
{
    // Define your method using the llvm_type here.
}

只要您转发声明它们,就可以对结构、容器和其他类型执行相同的操作。例如,假设您要使用 std::vector<int>那是 LLVM 编译器的一部分。在这种情况下,您在 header 中声明类似 class VectorInt; 的内容定义原型(prototype)并在您的 cpp 中编写:

#include <vector>
typedef std::vector<int> VectorInt;

并在您的方法定义中使用它。

您不能做的是定义依赖于 LLVM header 的模板类或方法,因为您需要在相同的 header 中定义方法,这将涉及了解导入类型的实现。

关于项目之间的c++ header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708080/

相关文章:

c++ - 二叉树 - 计算不同的节点

c# - 如何为 C# 中的对象实例提供 this 关键字?

c# - 调用接口(interface)成员的虚方法的CLR实现

compiler-construction - 绑定(bind) LLVM 3.8.4 no getGlobalContext

data-structures - 将非类型化 Lisp 数据映射为类型化二进制格式以用于编译函数

c++ - 二叉树 C++ 基础

c++ - 使用 C++ notify_all() 避免饥饿

.net - CIL 委托(delegate)行为与目标方法的冲突 "staticness"

c++11 - 添加 llvm 指令

C++ vector 迭代器