我怎样才能使c++中的函数像c#中的属性一样?

本文关键字:属性 一样 c++ 函数 | 更新日期: 2023-09-27 18:12:14

我在c++中有这个函数:

List<String^> ^GetCodecs()
    {
        List<String^> ^l = gcnew List<String^>;
        String ^s;
        for (int i=0;i<3333;i++)
        {
        s = gcnew String(Encoder_GetCodecName( i ));
        l->Add(s);
        }
        return l;
    }

这是在c#中,我得到列表:

List<string> l = new List<string>(f.GetCodecs());

所以我包含3333个索引,其中一些是编解码器的名称。

我现在想做的是,在c#中,而不是这样做:List l = new List(f.t getcodecs ());

以某种方式使我能够做例如:

f.GetCodecs .

当我点击GetCodecs之后的点时,它会打开一个新的大的编解码器列表,我可以用箭头上下移动,然后选择我想要的。

比如属性之类的。它现在不像List了

编辑!

的例子:

我在做。getcodecs。

在最后一点之后,我将看到这样的编解码器:

mpejxviddivx

我将立即看到它们,而不需要循环。

我怎样才能使c++中的函数像c#中的属性一样?

我想你在问什么:

当我在c++编辑器中输入f.GetCodecs. 时,我希望IDE中的在此之后显示编解码器列表,以便我可以从中选择项目一个列表,而不是必须输入f.GetCodecs.mpegCodec

如果这是你想要的,那么你需要GetCodecs是(或者返回,如果它是一个方法)一个对象,其字段/方法的名称是你想要的。在设计对象时,您必须选择出现的名称,例如,它不会基于机器上安装的编解码器。

如果我正确地解释了你的问题,那么CodeProject上有一篇很好的文章向你展示了如何做到这一点:c++/CLI Properties - accessor方法的语法糖

你需要显式地使它成为一个属性:

property List<String^> ^GetCodecs
{
    List<String^>^ get()
    {
        List<String^> ^l = gcnew List<String^>;
        String ^s;
        for (int i=0;i<3333;i++)
        {
            s = gcnew String(Encoder_GetCodecName( i ));
            l->Add(s);
        }
        return l;
    }
}

我没有准备好编译器,所以我不能测试这段代码,但是你明白了。