Функция C / C ++ с использованием float или double или int - PullRequest
5 голосов
/ 20 декабря 2010

У меня есть отдельные функции для чтения из текстового файла (в зависимости от того, является ли он int, float или double). Я хотел бы просто одна функция с дополнительным аргументом (без использования последующего оператора IF). У кого-нибудь есть идеи?

Ниже приведена форма моих текущих функций.

float * read_column_f (char * file, int size_of_col){
...
col = (float*) malloc (height_row * sizeof(float));
...  return(col);}


double *    read_column_d (char * file, int size_of_col){
...
col = (double*) malloc (height_row * sizeof(double));
...  return(col);}


int *   read_column_i (char * file, int size_of_col){
...
col = (int*) malloc (height_row * sizeof(int));
...  return(col);}

РЕДАКТИРОВАТЬ: Я хочу реализовать это в C ++, синтаксис в стиле C используется из-за предпочтения памяти.

Ответы [ 3 ]

6 голосов
/ 20 декабря 2010

ANSI C не поддерживает перегрузку функций, чего вы и пытаетесь достичь. C ++ делает, однако. См. Ссылку StackOverflow здесь: Значения по умолчанию для аргументов в функциях C и перегрузка функций в C

4 голосов
/ 20 декабря 2010

Вы не можете перегружать типы возвращаемых данных. Вы либо возвращаете значение по ссылке в качестве параметра функции:

void read_column (char * file, int size_of_col, float&);
void read_column (char * file, int size_of_col, int&);

...

или создайте шаблон:

template<class T> T read_column (char * file, int size_of_col);
2 голосов
/ 20 декабря 2010

Используйте шаблон, например:

template<typename Type>
Type * read_column(char * file, int size_of_col)
{
    Type* col = (Type*) malloc(size_of_col * sizeof(Type));
    ...
    return(col);
}

Затем вызовите так:

int    * col_int    = read_column<int>   ("blah", 123);
float  * col_float  = read_column<float> ("blah", 123);
double * col_double = read_column<double>("blah", 123);
etc.
...