【问题标题】:How to write function with rest/spred operator (from js) on c++?如何使用 rest/spread 运算符编写函数(来自 json c++?
【发布时间】:2021-09-16 13:32:33
【问题描述】:

如何在 C++ 上编写这样的函数?

function executor (foo, ...args) {
    return foo(...args)
}

我不明白如何在 C++ 上声明模板

【问题讨论】:

  • I don't understand how to declare template on C++ 那么您的第一步应该是搜索如何使用模板以及如何定义模板。如何获得与 JavaScript 类似的东西也取决于您的用例。 C++ 和 JavaScript 是两种不同的语言,具有不同的概念,因此解决问题的方法也不同。 JavaScript 中的 rest/spread 是在运行时完成的,C++ 中的可变参数类模板和折叠表达式是在编译时完成的,因此这两个概念之间没有一对一的映射。

标签: javascript c++ templates


【解决方案1】:

你的问题对我来说不是很清楚你在问什么,或者你想做什么。

这是一个invoke 模板函数的示例,它调用传递的函数并将参数传递给函数的参数。这似乎是您的代码 sn-p 正在尝试做的事情。

代码仅用于简单粗暴的示例。它不是最优的,因为它没有使用完美的参数转发。不确定你想对调用函数的结果做什么,或者处理异常。

#include <iostream>

using std::cout;

template <typename F, typename... Ts>
void invoke(F fn, Ts... args) {
    fn(args...);
}

void print(int a, int b) {
    cout << "print:" << a << " " << b << "\n";
}

void bigprint(int a, int b, int c) {
    cout << "bigprint:" << a << " " << b << " " << c << "\n";
}

int main() {
    invoke(print, 1, 2);
    invoke(bigprint, 1, 2, 3);
}

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多