Вы пытаетесь связать две вещи одновременно: экземпляр и метод, чтобы вызвать его, и он будет выглядеть как указатель на функцию. К сожалению, это не работает в C ++. Вы можете привязать указатель только к простой функции или к методу static . Итак, вы добавляете статический метод «RegisterCB» и регистрируете его в качестве обратного вызова:
static Handle<Value> RegisterCB(const Arguments& args);
...FunctionTemplate::New(&PluginManager::RegisterCB)...
Теперь, откуда вы взяли pluginManagerInstance? Для этого большинство API-интерфейсов регистрации обратного вызова в V8 имеют дополнительный параметр «data», который будет возвращен обратному вызову. Как и FunctionTemplate :: New. Итак, вы действительно хотите связать это так:
...FunctionTemplate::New(&PluginManager::RegisterCB,
External::Wrap(pluginManagerInstance))...
Затем данные доступны через args.Data (), и вы можете делегировать их фактическому методу:
return ((PluginManager*)External::Unwrap(args.Data())->Register(args);
Конечно, это можно сделать немного проще с помощью некоторого макроса.