powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / создание __gc массивов
5 сообщений из 5, страница 1 из 1
создание __gc массивов
    #32852421
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть стр-ра:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
__gc struct Ident
{
	ComboBox *	cbItem;
	String *	tblId;
	String *	clmId;

	Ident()
	{
		this->cbItem = new ComboBox();
		this->tblId = new String(S"");
		this->clmId = new String(S"");
	}
};
надо создать массив, но следующий код не прокатывает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 Ident * Scheme[];//
	 for(int i= 0 ;i<columns->Count;i++)
	 {
		 Ident * tmp = new Ident();
		 tmp->clmId = columns[i];
		 tmp->tblId = tables[i];
		 tmp->cbItem->Location = System::Drawing::Point( 20 + 140 *i,  15 );
		 tmp->cbItem->Size = System::Drawing::Size( 120 ,  21 );
		 tmp->cbItem->TabIndex = i;
		 this->Controls->Add(tmp->cbItem);
		 Scheme->Add(tmp);
	 }
а объявить
Код: plaintext
Ident * Scheme[ 4 ];
компилятор тоже не позволяет...
...
Рейтинг: 0 / 0
создание __gc массивов
    #32852456
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
решение оказалось такое:
Код: plaintext
Array * Scheme = Array::CreateInstance(__typeof(Ident), 4 );
...
Рейтинг: 0 / 0
создание __gc массивов
    #32852860
dwl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dwl
Гость
Кстати, в NET можно использовать STL, для этого существует враппер gcroot.
...
Рейтинг: 0 / 0
создание __gc массивов
    #32852864
dwl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dwl
Гость
Код: plaintext
1.
2.
#include <vcclr.h>
vector <gcroot<Ident __gc*> > v;

Т.к. это NET то классы тебе придется расплогать в куче. Это как VCL в Builder, просто надо привыкнуть. Однако добавив еще один хидер ты можешь использовать алгоритмы и всю мощь STL.

Код: plaintext
1.
2.
#include "gcstl.h"
sort (v.begin(), v.end(), gc_less<Ident __gc*>());

В MSDN ты найдешь, что шаблоны функциональных врапперов идентичны интерфейсам, которые используются в NET. Но помимо функторов, там есть адаптированные шаблоны итераторов ввода и вывода

Код: plaintext
1.
2.
copy (v.begin(), v.end(), textwriter_iterator<Ident __gc*>
                                                (Console::Out, S" "));

Если ты все же решишь использовать Array, тогда существует враппер gc_collection, который позволяет адаптировать эти массивы для использования в алгоритмах STL.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <algorithm>
#include "gcstl.h"

using namespace System;
using namespace std;


int main()    {
    String __gc* st_array[] = {S"bca", S"bac", S"abc"};
    gc_collection<Array __gc*, String __gc*> cont(st_array);
    gc_collection<Array __gc*, String __gc*>::const_iterator it =
        find_if(cont.begin(), cont.end(),
            bind2nd(gc_equal_to<gcroot<String __gc*> >(),S"abc"));
    if (it != cont.end())
        Console::WriteLine(*it);
}

Рекомендую глянуть фициальную спецификацию управляемого C++
...
Рейтинг: 0 / 0
создание __gc массивов
    #32855520
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо =). покопаюсь.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / создание __gc массивов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]