How do I create a Generic.List?

A

Arcadefreaque

I'm realizing how little I know about C++ today as I try to convert
some functionality from VB.Net to C++.

I have a procedure that I need to pass a List of objects to, and
cannot see how to do this using C++. It's easy in VB.Net, so I'm
hoping it is just my silly misunderstanding of c++ that is preventing
me from doing this in c++.

In VB.Net, to create a couple of objects and add them into a generic
list, this is the code that is used:
' Assign parameter list for GEOCODING
Dim addrVal1 As New ESRI.ArcGIS.ADF.Web.Geocode.AddressValue("STREET",
pAddress)
Dim addrVal2 As New ESRI.ArcGIS.ADF.Web.Geocode.AddressValue("ZONE",
pZipcode)
Dim addrValColl As New System.Collections.Generic.List(Of
ESRI.ArcGIS.ADF.Web.Geocode.AddressValue)
addrValColl.Add(addrVal1)
addrValColl.Add(addrVal2)

In C++, I realize that creating the objects for the list would be
something like this:
Geocode::AddressValue __gc * addrVal1 = new
Geocode::AddressValue(S"STREET", pAddress);
Geocode::AddressValue __gc * addrVal1 = new
Geocode::AddressValue(S"ZONE", pZipcode);

But, how do I go about defining the AddrValColl apppropriately so that
I can add my two objects to it and then call my procedure?

Thanks in advance for any assistance you might be able to provide.
 
P

Peter Oliphant

How about creating a list of void pointers? Not sure how to do it with
lists, but as an array:

#typedef array<void^> VoidArray ;

VoidArray^ varray = gcnew VoidArray( count ) ;

for ( init 1 = 0 ; i < count ; i++ )
{
varray = 'pointer to object' ;// meta-code
}

Been a while since I worked with Lists, but there is likely a way to do this
with those instead of arrays...

[==Peter==]
 
B

Ben Voigt [C++ MVP]

Arcadefreaque said:
I'm realizing how little I know about C++ today as I try to convert
some functionality from VB.Net to C++.

I have a procedure that I need to pass a List of objects to, and
cannot see how to do this using C++. It's easy in VB.Net, so I'm
hoping it is just my silly misunderstanding of c++ that is preventing
me from doing this in c++.

In VB.Net, to create a couple of objects and add them into a generic
list, this is the code that is used:
' Assign parameter list for GEOCODING
Dim addrVal1 As New ESRI.ArcGIS.ADF.Web.Geocode.AddressValue("STREET",
pAddress)
Dim addrVal2 As New ESRI.ArcGIS.ADF.Web.Geocode.AddressValue("ZONE",
pZipcode)
Dim addrValColl As New System.Collections.Generic.List(Of
ESRI.ArcGIS.ADF.Web.Geocode.AddressValue)
addrValColl.Add(addrVal1)
addrValColl.Add(addrVal2)

In C++, I realize that creating the objects for the list would be
something like this:
Geocode::AddressValue __gc * addrVal1 = new
Geocode::AddressValue(S"STREET", pAddress);
Geocode::AddressValue __gc * addrVal1 = new
Geocode::AddressValue(S"ZONE", pZipcode);

Since you're using generics, I'm assuming you're using .NET 2.0. The C++
compiler was totally changed between .NET 1.x and 2.0 and the syntax you
show is no longer used.

Try

Geocode::AddressValue^ addr1 = gcnew Geocode::AddressValue ("STREET",
pAddress);
Geocode::AddressValue^ addr2 = gcnew Geocode::AddressValue ("ZONE",
pZipcode);
System::Generic::Collections::List<Geocode::AddressValue^>^ addrValColl =
gcnew System::Generic::Collections::List<Geocode::AddressValue^>();
addrValColl->Add(addrVal1);
addrValColl->Add(addrVal2);
 
B

Ben Voigt [C++ MVP]

Ben Voigt said:
Since you're using generics, I'm assuming you're using .NET 2.0. The C++
compiler was totally changed between .NET 1.x and 2.0 and the syntax you
show is no longer used.

Try

Geocode::AddressValue^ addr1 = gcnew Geocode::AddressValue ("STREET",
pAddress);
Geocode::AddressValue^ addr2 = gcnew Geocode::AddressValue ("ZONE",
pZipcode);
System::Generic::Collections::List<Geocode::AddressValue^>^ addrValColl =
gcnew System::Generic::Collections::List<Geocode::AddressValue^>();

I think I got it backwards, try System::Collections::Generic::List ...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top