Cal*_*ray 5 c++ v8 node.js node.js-addon
自从我使用C++以来已经有很长一段时间了,甚至更长时间以来我一直围绕着硬类型.我只是在寻找一个工作的衬管来从v8获取参数,或者在没有提供参数时使用默认值.
v8::String::Utf8Value arg0(args[0]);
v8::String::Utf8Value arg1(args[1]);
v8::String::Utf8Value arg2(args[2]);
const char *username = (args.Length() > 0) ? *arg0 : "";
const char *password = (args.Length() > 1) ? *arg1 : "";
const char *service = (args.Length() > 2) ? *arg2 : "login";
Run Code Online (Sandbox Code Playgroud)
输出:
func(); // { username: "", password: "", service: "login" }
func('1'); // { username: "1", password: "", service: "login" }
func('1', '2'); // { username: "1", password: "2", service: "login" }
func('a', 'b', 'c'); // { username: "a", password: "b", service: "c" }
不幸的是,以下接近理想的解决方案对我不起作用(任何想法为什么?):
const char *username = (args.Length() > 0) ? *v8::String::Utf8Value(args[0]->ToString()) : "";
const char *password = (args.Length() > 1) ? *v8::String::Utf8Value(args[1]->ToString()) : "";
const char *service = (args.Length() > 2) ? *v8::String::Utf8Value(args[2]->ToString()) : "login";
Run Code Online (Sandbox Code Playgroud)
维亚切斯拉夫·叶戈罗夫(Vyacheslav Egorov)用他的评论钉住了它,当我访问该字符串时,它已被销毁.最终我最终使用:
char *get(v8::Local<v8::Value> value, const char *fallback = "") {
if (value->IsString()) {
v8::String::AsciiValue string(value);
char *str = (char *) malloc(string.length() + 1);
strcpy(str, *string);
return str;
}
char *str = (char *) malloc(strlen(fallback) + 1);
strcpy(str, fallback);
return str;
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
v8::Handle<v8::Value> myMethod(const v8::Arguments &args) {
char *username = get(args[0], "user");
char *password = get(args[1], "pass");
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5699 次 |
| 最近记录: |