我在创建可在C++/CLI的类中访问所有函数的数组时遇到了很多麻烦。由于它是C++/CLI,std :: vector不起作用。 Boost :: array抛出一个有关托管类型使用的非托管类型的错误。我不想使用指针数组,因为我想获得数组的大小。 System :: List太慢(我的程序中每个ms都很重要,但是如果它有帮助,我不关心写入阵列的速度,一次只读取一个元素的速度)。 cliext :: vector是最接近我得到这个工作。如何在C++/CLI中创建全局可访问的二维数组
我用int创建了一个单维cliext :: vector,它工作。但是,当我试图使用
cliext::vector<cliext::vector<int>> test;
它失败,出现类似的错误,如下所示。这里是我用它在我的课:
标题:
cliext::vector<Color> test;
我在构造函数中设置值是:
test = gcnew cliext::vector<Color>(5);
test[0] = Color(255,255,255);
然后我试图让这将存储类3变量的颜色。这是头文件。构造函数只是设置了R,G,B值:
namespace FrameCalculator {
class Color {
public:
Color(int r, int g, int b);
int r;
int g;
int b;
};
但是这并不工作,并把它扔到下面的错误:
1>E:\Microsoft Visual
Studio\2017\Community\VC\Tools\MSVC\14.11.25503\include\cliext\vector(1091):
note: see reference to class template instantiation
'cliext::impl::vector_base<_Value_t,false>' being compiled
1> with
1> [
1> _Value_t=FrameCalculator::Color
1> ]`
和
1>E:\Microsoft Visual
Studio\2017\Community\VC\Tools\MSVC\14.11.25503\include\cliext\vector(615):
error C3671: 'cliext::impl::vector_impl<_Value_t,false>::SyncRoot::get':
function does not override 'System::Collections::ICollection::SyncRoot::get'
1> with
1> [
1> _Value_t=FrameCalculator::Color
1> ]`
有这些错误中的每一个大约有5个。我究竟做错了什么?我如何获得不慢的二维数组,可以在全局访问。我不需要两个数组都是动态的(我宁愿不要)。我知道内部数组将有3个元素,但在编译时我不会知道外部数组的大小。我如何实现这一目标?
cliext类相当*比框架集合类慢得多。像列表一样。所以简单的解决方案,停止使用它。 –
@HansPassant我没有意识到这一点。你建议我用什么?我想我会尝试使用不同类的非托管类型。你有什么其他的建议? – Byte11
这取决于“列表太慢”,没有任何证据表明它太慢。将代码加快20%,使其快五倍,这两者之间存在巨大差异。只有一个体面的原因,为什么这样的重要细节缺失,你不知道它是否真的太慢,你只是假设它可能是。这并不慢。因此,先让它工作,总是比无法工作的代码好得多,然后找出它是否符合要求,那么您可能仍然有一个问题,其答案可能对您有用。 –