Чтобы сделать эту функцию универсальной для любого типа данных, который вы решите использовать, просто создайте функцию, которая не обрабатывает специфический тип данных, а вместо этого использует указатели на функции.
Это означает, что вместо передачи этой функции символкакой тип пользователь выбирает, а затем создает регистр для int
, регистр для char
и регистр для float
, функции передачи, которые обрабатывают каждый тип в качестве аргумента.
Например, сделать функцию initMatrix
вроде:
void initMatrix(void*** matrix, int nRows, int nCols, void(*creatematrix)(void ***, int, int));
Теперь создайте еще одну функцию, которая будет обрабатывать создание int **matrix
, давайте вызовем ее void CreateIntMatrix(void ***matrix, int m, int m);
и передадим указатель на эту функцию в качестве аргументафункция initmatrix.Теперь, когда вы вызываете initMatrix
для обработки типов данных int, просто вызывайте его так:
void initMatrix(&matrixOfAs, 3, 3, CreateIntMatrix);
, вы должны также создать функцию, которая обрабатывает char, double и т. Д.
Теперь, когда вы создаете функцию initMatrix, создайте ее так:
void initMatrix(void*** matrix, int nRows, int nCols, void(*creatematrix)(void ***, int, int)){
/*Make something*/
creatematrix(matrix, nRows, nCols)//initialize any type of matrix
/*Make something*/
}