我想用一个来自向量的参数调用一个函数.仅这一点当然很容易,但我想写一个通用的包装器来为我完成任务.后来它也应该从类似boost :: variant的泛型类型进行转换,但我认为在解决这个问题后我可以处理它.
这是我的第一次尝试:
#include <iostream>
#include <functional>
#include <vector>
using namespace std;
void foo(int a, int b)
{
cout << a*10+b << endl;
}
template<class... Args>
void callByVector(std::function<void(Args...)> f, vector<int>& arguments)
{
int i = 0;
f(static_cast<Args>(arguments[i++])...);
}
int main()
{
vector<int> arguments;
arguments.push_back(2);
arguments.push_back(3);
callByVector(std::function<void(int,int)>(foo),arguments);
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,但正如您可能猜到的,未定义增量的执行顺序.因此,整体结果可以是23或32(我可以用不同的编译器确认).
任何想法或我必须忘记这一点?
问候,弗洛里安
我有一个 Flask 应用程序,它将提供一个端点来下载一个大文件。但是,不是从文件系统提供它或即时生成文件,而是必须首先通过 HTTP 从另一台服务器下载该文件。
当然,我可以先向外部服务器执行 GET 请求,完整下载文件并将其存储在文件系统或内存中,然后作为第二步提供原始请求的结果。这看起来像这样(还包括一个基本的身份验证,以表明为什么在较低层上的简单代理是不够的):
#!flask/bin/python
from flask import Flask, jsonify
import os
import requests
from requests.auth import HTTPBasicAuth
app = Flask(__name__)
@app.route('/download')
def download():
auth = HTTPBasicAuth("some_user", "some_password")
session = requests.Session()
session.auth = auth
response = session.get("http://example.com")
return response.content
if __name__ == '__main__':
app.run(host='0.0.0.0', port=1234, debug=True)
Run Code Online (Sandbox Code Playgroud)
但是,这会增加应用程序的延迟和存储要求。而且,即使接收方只需要执行文件的部分下载(即执行 HTTP 范围请求),也必须首先从外部服务器完全获取文件。
有没有更优雅的选择来解决这个问题,即为直接转发到外部服务器的 HTTP 范围请求提供支持?
我会假设
std::optional<const std::string>
Run Code Online (Sandbox Code Playgroud)
允许为可选项分配一个新值,但不能更改字符串本身和
const std::optional<const std::string>
Run Code Online (Sandbox Code Playgroud)
两者都做是不可能的。但是下面的呢?
const std::optional<std::string>
Run Code Online (Sandbox Code Playgroud)