如何将没有引号的字符串传递给函数?

问题描述

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")}

如果有人有更好的模板方法,请告诉。