Hi,
I am trying to return "wrapped objects" from a single object playing the
role an object factory. I ve tried something like this but it does nt seem
to work:
// the ObjectWrap factory which also inherits from ObjectWrap.
class NoomraEngine: public node::ObjectWrap {
public:
static Persistent<FunctionTemplate> s_ct;
static void Initialize(Handle<Object> target);
static Handle<Value> New(const Arguments& args);
static Handle<Value> CreateInstrument(const Arguments& args); //
factory method for returning wrapped objects.
NoomraEngine();
virtual ~NoomraEngine();
};
Handle<Value> NoomraEngine::CreateInstrument(const Arguments& args) {
HandleScope scope;
// determine which object to create according to args.
// so for example if it's a VanillaEquityOptionWrapper:
return scope.Close(VanillaEquityOptionWrapper::New(args));
}
For example VanillaEquityOptionWrapper is declared as follows and should
one of the possible wrapped objects returned by NoomraEngine:
class VanillaEquityOptionWrapper : public node::ObjectWrap {
private:
//VanillaEquityOption* equityOption;
public:
static Persistent<FunctionTemplate> create;
static void Initialize(Handle<Object> target);
static Handle<Value> New(const Arguments& args);
static Handle<Value> Price(const Arguments& args); // mapped to
priceEquity for node.
VanillaEquityOptionWrapper();
virtual ~VanillaEquityOptionWrapper();
};
} /* namespace noomra */
#endif /* VANILLAEQUITYOPTIONWRAPPER_H_ */
Here's the node output:
> var addon = require('noomra');
undefined
> var engine = new addon.NoomraEngine();
undefined
> var equity = engine.createInstrument();
undefined
> equity.priceEquity();
TypeError: Object #<NoomraEngine> has no method 'priceEquity'
at repl:1:8
at REPLServer.self.eval (repl.js:111:21)
at rli.on.e (repl.js:260:20)
at REPLServer.self.eval (repl.js:118:5)
at Interface.<anonymous> (repl.js:250:12)
at Interface.EventEmitter.emit (events.js:88:17)
at Interface._onLine (readline.js:183:10)
at Interface._line (readline.js:502:8)
at Interface._ttyWrite (readline.js:720:14)
at ReadStream.<anonymous> (readline.js:105:12)
>