Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Шаблон фун-ции


Автор: GuManOiD 16.9.2005, 21:28
Вот кусман проги:
Код

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

template <class T> void func(*arr);

int main()
{
int *arr;
//ЗДЕСЬ ДОЛЖНО БЫТЬ ВЫДЕЛЕНИЕ ПАМЯТИ
func(arr);
//....
return 0;
}

template <class T> void func(*arr)
{
//тут идет работа с массивом arr, но ето не важно
}


А как можно функцией malloc выделить нужное кол-во памяти для массива arr если тип заранее не известен...,
короче как сделать так что бы T был видим в main..., тех кто понял что мне надо, прошу помочь.

Автор: Mayk 16.9.2005, 21:31
Цитата(GuManOiD @ 17.9.2005, 01:28)
А как можно функцией malloc выделить нужное кол-во памяти для массива arr если тип заранее не известен...,

Код

arr = (T*) malloc (sizeof(T)*numberOfElements);

Цитата(GuManOiD @ 17.9.2005, 01:28)
короче как сделать так что бы T был видим в main...,

Дыкть он и так виден - int*.

Автор: GuManOiD 16.9.2005, 21:38
ну..., емае, так и знал smile
а если мне надо написать
Код

arr = (T*) malloc (sizeof(T)*numberOfElements);

тока в main!
если я выделю память в етой ф-и то при ваыходи из нее, в main нельзя будет дальше работать

Автор: Mayk 16.9.2005, 21:46
malloc выделяет память динамически. То есть при выходе из ф-ции она не затрется:
Код

template<typename T>
T* allocArray(T* freeMe, int i){
    free(freeMe);
    return (T*)malloc(i*sizeof());
}

int main()
{
   int* arr = 0;
   arr = allocArray(arr,10);
   arr[1]=1; //<--корректно.
   free(arr); //<--освобождение памяти
}

не забудь потом где-нить память только освободить.


Цитата(GuManOiD @ 17.9.2005, 01:38)
а если мне надо написать тока в main!

можно воспользовать тем, что arr указатель.
Код

arr=malloc(sizeof(*arr)*numberOfElements);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)