Я много возился с этим, поэтому
просто дополнительно:
Я использую модуль c, который я не хочу переименовывать в * .m файлы. И мне нужен журнал оттуда.
Никакие обертки не могут помочь мне избежать ошибок компоновщика.
Поэтому я использовал следующий шаблон:
Я сделал hpp и cpp файлы
Добавлена переменная extern - указатель на функцию для заголовка:
extern void (*transLogFun) (const char *,...);
и его определение в файл cpp
void (*transLogFun) (const char *,...) = NULL;
Затем я создал файл h и mm:
ч:
#import <UIKit/UIKit.h>
#import "fff.hpp"
void ioslogfun(const char *s, ...);
В mm-файле я написал функцию и класс с таким объектом:
#import "zzz.h"
#import <Foundation/Foundation.h>
void ioslogfun(const char *s, ...){
va_list vl;
va_start(vl,s);
char *str;
vasprintf(&str,s,vl);
va_end(vl);
NSLog([NSString stringWithUTF8String:str]);
free(str);
}
class Fff{
public:
Fff(){
transLogFun = &ioslogfun;
}
};
Fff initiator;
И где бы я ни вызывал transLogFun (...), он работал нормально.