问题描述
template<typename... Args>
void callJavaScript(const Args&... args) {
// TO-DO
}
callJavaScript({
console.log("Hello World")
})
是否可以使用 Variadic 模板(有/没有宏 hack)来完成这样的事情?
相反
callJavaScript("{
console.log('Hello World')
}")
我想要
callJavaScript({
console.log("Hello World")
})
这是我发现使用宏的示例,
#define MULTI_LINE_STRING(a) #a
const char *text = MULTI_LINE_STRING(
Using this trick(,) you don't need to use quotes.
Though newlines and multiple white spaces
will be replaced by a single whitespace.
);
这是我的这个宏的版本,
#define createScript(name,...) \
const char *name = #__VA_ARGS__;
解决方法
回答我自己的问题。
void callJavaScript(std::string script) {
std::cout << script << "\n";
}
#define callJavaScript(...) callJavaScript(#__VA_ARGS__)
现在你可以这样调用了,
callJavaScript({
console.log("Hello World")
})
你可以编译这个然后它会输出
{console.log("Hello World")}
如果有人有更好的模板方法,请告诉。