在用c ++编写应用程序时遇到了麻烦。我有两个项目。项目A是普通的c ++项目,项目B是c ++项目,支持clr。项目A包含使用LLVM框架中的标头的类。项目B包含项目A的某些类的托管包装器。我可以在项目B中使用项目A中的类而不包括其标题吗?
原因是这个。当我在项目B中包含项目A的类头时,我还需要指定项目A中此头文件使用的框架库,但LLVM框架不能与clr支持一起使用。我无法移动框架包括从头到cpp文件。我该如何解决?
答案 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标头的模板类或方法,因为您需要在相同的标头中定义方法,这将涉及了解导入类型的实现。