gpt4 book ai didi

c++ - 如何通过引用传递 Generic::List?

转载 作者:行者123 更新时间:2023-11-30 03:12:34 25 4
gpt4 key购买 nike

为了将一些非托管代码包装在托管 .dll 中,我试图将数据点的 Generic::List 转换为 std::vector .这是我正在尝试做的事情的片段:

namespace ManagedDLL
{
public ref class CppClass
{
void ListToStdVec( const List<double>& input_list, std::vector<double>& output_vector )
{
// Copy the contents of the input list into the vector
// ...
}

void ProcessData( List<double> sampleData )
{
std::vector<double> myVec;

ListToStdVec( sampleData, myVec );

// Now call the unmanaged code with the new vector
// ...
}
}
}

编译这个给我:

error C3699: '&' : cannot use this indirection on type 'const System::Collections::Generic::List'

我可能在这里错过了一些基本的东西(我对 .net 的做事方式相对较新),但对我来说这看起来像是合理有效的代码......?

[编辑] 我已经尝试过 Andy 和 Dario 的建议并且它们有效,但是我如何访问输入列表的成员?我已经尝试了各种 dreferencing 的组合,但似乎没有编译:

void ListToStdVec( const List<double>% input_list, std::vector<double>& output_vector )
{
int num_of_elements = input_list->Count;
}

void ListToStdVec( const List<double>^ input_list, std::vector<double>& output_vector )
{
int num_of_elements = input_list.Count;
}

...都给我:

error C2662: 'System::Collections::Generic::List::Count::get' : cannot convert 'this' pointer from 'const System::Collections::Generic::List' to 'System::Collections::Generic::List %'

...那么您如何访问引用/指针?

最佳答案

根据 Herb Sutter , % 是托管对象按引用传递的字符。将代码转换为以下内容,它应该可以工作:

void ListToStdVec( const List<double>% input_list, std::vector<double>& output_vector
{
// Copy the contents of the input list into the vector
// ...
}

编辑:我认为 const 是导致问题的原因,尽管我不确定原因。如果您将 List 参数更改为不是 const,那么如果您使用 -> 运算符,第一个函数将编译,而第二个函数如果您使用 . 运算符,将会编译(我不确定为什么存在这种差异 - 它没有多大意义)。

就是说,如果您只想将 List 中的元素复制到 vector 中,那么您真的想使用 ^。将其视为对托管对象的引用。我认为 % 如果您想“通过引用”传递引用(即将 input_list 重新分配给 ListToStdVec() 中的其他内容,则可以使用,并让调用者看到该赋值的结果。但是,鉴于您在使用 % 时使用 . 运算符访问成员,这告诉我我可能不明白这根本不是目的。

关于c++ - 如何通过引用传递 Generic::List?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/883632/

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