Как может я определение типа указатель функции, который берет функцию его собственного типа как аргумент?

Это даст вам желаемый результат!

$arrayItems = [
    [
        "StartTime" => "00:00:00",
        "type" => 1,
        "DateAppointment" => "2019-02-24",
        "SDay" => "Sun"
    ],
    [
        "StartTime" => "00:00:00",
        "type" => 1,
        "DateAppointment" => "2019-02-25",
        "SDay" => "Mon",
    ],
    [
        "StartTime" => "00:00:00",
        "type" => 1,
        "DateAppointment" => "2019-02-26",
        "SDay" => "Tue"
    ],
    [
        "StartTime" => "00:10:00",
        "type" => 1,
        "DateAppointment" => "2019-02-24",
        "SDay" => "Sun"
    ]
];

$mergedArray = [];
$i = 0;
foreach($arrayItems as $arrayItem) {
    $keys = array_keys($arrayItem);   
    foreach($keys as $key){

        if(array_key_exists($key, $mergedArray[$arrayItem["StartTime"]])){      
           $newkey = $key.$i;
           $mergedArray[$arrayItem["StartTime"]][$newkey] = $arrayItem[$key];
        }
        else{
           $mergedArray[$arrayItem["StartTime"]][$key] = $arrayItem[$key];                      
        }

    }
    $i++;
}

echo '<pre>';
var_dump($mergedArray);
10
задан Jonathan Leffler 3 May 2009 в 06:29
поделиться

2 ответа

Вы можете обернуть указатель функции в структуру:

struct fnptr_struct;
typedef void (*fnptr)(struct fnptr_struct *);
struct fnptr_struct {
  fnptr fp;
};

Я не уверен, является ли это улучшением при приведении. Я подозреваю, что это невозможно без структуры, потому что C требует, чтобы типы были определены до их использования, и нет непрозрачного синтаксиса для typedef.

10
ответ дан 3 December 2019 в 22:01
поделиться

Это невозможно сделать напрямую. Ваши единственные варианты - заставить аргумент указателя функции принимать неопределенные аргументы или указатель на структуру, содержащую указатель функции, как предложил Дейв .

// Define fnptr as a pointer to a function returning void, and which takes one
// argument of type 'pointer to a function returning void and taking
// an unspecified number of parameters of unspecified types'
typedef void (*fnptr)(void (*)());
6
ответ дан 3 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: