FileCodeModel::AddFunction 在传递 vsCMFunctionConstructor 时生成一个



这段代码是我想生成的(c ++)

X::X()
{
}

但是,下面的 AddFunction 调用会生成一个返回类型的函数(源是表示 cpp 源文件的 FileCodeModel):

source.AddFunction("X::X" , vsCMFunction.vsCMFunctionConstructor, null, -1,vsCMAccess.vsCMAccessDefault);

将 null 替换为以下任何返回类型都没有区别:

"X"

vsCMTypeRef.vsCMTypeRefVoid

vsCMTypeRef.vsCMTypeRefCodeType

vsCMTypeRef.vsCMTypeRefOther

所有这些都会产生一个返回类型的函数,如下所示,甚至指定了艰难的 vsCMFunctionConstructor:

int X::X()
{
}

使用 FileCodeModel 接口,如何生成一个简单的构造函数,即没有返回类型的函数?

这是重现我的问题的最简洁的代码。

好吧,看看你的示例项目,我想我可以看到问题所在。

您打开了.cpp文件上的FileCodeModel,并且正在向其添加函数 - 但没有类。

此外,要生成C++,应确保使用 VCCodeModel .

你应该做的是先创建一个类,然后将构造函数添加到类中。 像这样:

// get IDE
EnvDTE.DTE dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.12.0");
// select the second project (pre-created as in your example)
var project = dte.Solution.Projects.Item(2);
// get the VC code model
VCCodeModel pModel = (VCCodeModel)project.CodeModel;
// create a class in the header (also creates header if not existing)
var pClass = pModel.AddClass("X", "test.h");
// add the constructor implementation in the cpp file 
pClass.AddFunction("X", EnvDTE.vsCMFunction.vsCMFunctionConstructor, null, 
       0, EnvDTE.vsCMAccess.vsCMAccessDefault, "test.cpp");

这会在test.h文件中正确生成以下代码:

class X
{
    X(void);
};

以及以下test.cpp文件:

#include "test.h"
X::X(void)
{
}

相关内容

  • 没有找到相关文章

最新更新