Как проверить, является ли указатель void структурой или строкой? - PullRequest
0 голосов
/ 14 февраля 2012

Могу ли я проверить тип пустого указателя? Я хочу решить эту проблему:

void log(void *test) {
    if (is a struct) {
        NSLog(test);
    } else {
        printf("%s\n", test);
    }    
}

log(@"This send a struct (NSString)");
log("This send normal string");

Есть простой способ проверить это?

Ответы [ 2 ]

6 голосов
/ 14 февраля 2012

Нет, вы не можете проверить это.Пустота * - это просто адрес в памяти, где может храниться что угодно (или даже ничего).Это значение полностью зависит от реализации и знает только оригинальный программист (или документация).

0 голосов
/ 14 февраля 2012

Нет никакого способа сделать такое обнаружение не зависящим от реализации способом, поскольку, когда вы приводите NSString к пустоте *, вы отбрасываете всю информацию о типах и преобразуете ее в «нетипизированный указатель на память».

Я не уверен, почему вам нужна такая функциональность, но если она находится между двумя объектами, вы должны использовать «id» вместо void *, поскольку это сохраняет всю информацию о типах.

В этом конкретном примере, вероятно, было бы гораздо разумнее просто сделать "log" перегруженной функцией и таким образом узнать тип времени компиляции параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...