gpt4 book ai didi

c++ - FileCodeModel::AddFunction 在传递 vsCMFunctionConstructor 时生成具有返回类型的函数

转载 作者:行者123 更新时间:2023-11-28 03:01:15 26 4
gpt4 key购买 nike

这段代码就是我要生成的(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 接口(interface),我如何生成一个简单的构造函数,即一个没有返回类型的函数?

Here is the most minimal code to recreate my problem .

最佳答案

好吧,看看你的示例项目,我想我能看出问题所在。

您在 .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)
{
}

关于c++ - FileCodeModel::AddFunction 在传递 vsCMFunctionConstructor 时生成具有返回类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com