项目之间的c ++标题

时间:2014-12-30 15:24:30

标签: c++ clr llvm header-files

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

原因是这个。当我在项目B中包含项目A的类头时,我还需要指定项目A中此头文件使用的框架库,但LLVM框架不能与clr支持一起使用。我无法移动框架包括从头到cpp文件。我该如何解决?

1 个答案:

答案 0 :(得分:0)

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

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

class llvm_type;

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

然后在projectA.cpp中包含LLVM标头:

#include <llvm_type.h>

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

只要您转发声明它们,就可以对结构,容器和其他类型进行相同的操作。例如,假设您要使用属于LLVM编译器的std::vector<int>。在这种情况下,您在标题中声明类似class VectorInt;的内容以定义原型,并在您编写的cpp中:

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

并在方法定义中使用它。

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