Могу я повышать:: связать () с функцией Objective C?

У меня была такая же проблема после чистой установки apache2, munin и munin-node на Ubuntu 12.04LTS. Перепробовал все предложенные варианты без эффекта. В конце концов я обнаружил, что мне нужно

chmod 755 /var/www/munin
chown -R munin:munin /var/www/munin

Это решило это для меня.

CD / Pub

больше пива

10
задан Piotr Dobrogost 9 July 2009 в 21:04
поделиться

1 ответ

У вас должна быть возможность выполнить привязку к реализации сообщения ( IMP ), которая представляет собой простые функции C с двумя скрытыми параметрами, self и _cmd типов id и SEL соответственно.

EDIT : Только что протестировал следующий полный пример, и, похоже, он работает.

#include <stdio.h>
#include <boost/bind.hpp>
#include <Foundation/NSObject.h>

@interface MyClass : NSObject
{
}
-(int) doSomething:(int)arg;
@end

@implementation MyClass
-(int) doSomething:(int)arg
{
  printf("doSomething: self=0x%08x _cmd=0x%08x\n", self, _cmd);
  return arg + 1;
}
@end

int main(void)
{
  MyClass *myObj = [[MyClass alloc] init], *otherObj = [[MyClass alloc] init];
  typedef int (*MyFunc)(id, SEL, int);
  SEL doSomething_sel = @selector(doSomething:);
  MyFunc doSomething_impl = (MyFunc)[myObj methodForSelector:doSomething_sel];

  // bind self & _cmd arguments:
  // calls [myObj doSomething:x]
  int result = boost::bind(doSomething_impl, myObj, doSomething_sel, _1)(14);
  printf("result1: %d\n", result);

  // bind _cmd & arg:
  // calls [otherObj doSomething:3]
  result = boost::bind(doSomething_impl, _1, doSomething_sel, 42)(otherObj);
  printf("result2: %d\n", result);

  return 0;
}

С GNUstep, компилируйте как:

gcc objcbind.mm -o objcbind -I/usr/include/GNUstep -lobjc -lstdc++ -lgnustep-base

В Mac OS X компилируйте как:

gcc objcbind.mm -o objcbind -framework Foundation -lstdc++

Вывод:

doSomething: self=0x01a85f70 _cmd=0x00602220
result1: 15
doSomething: self=0x01a83d70 _cmd=0x00602220
result2: 43
16
ответ дан 3 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

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