我最近了解了模板模板参数的存在,现在想知道这样的事情是否可行:
template<template<class... > class Container, typename... args>
struct ContainerTemplate
{
using container = std::tuple<Container<args...>...>;
};
Run Code Online (Sandbox Code Playgroud)
我想要的是一个模板,它获取一个Container或一些其他模板类作为模板模板参数,然后扩展其余的模板参数,如果Container有N个模板参数,我给args的N*M模板参数我用N模板args获得M模板实例化,例如:
ContainerTemplate<std::vector, int, short, char>
//assuming std::vector takes only 1 arg for simplicity
Run Code Online (Sandbox Code Playgroud)
应该导致
container = std::tuple<std::vector<int>, std::vector<short>, std::vector<char>>
Run Code Online (Sandbox Code Playgroud)
而
ContainerTemplate<std::map, int, int, short, short>
//assuming std::map takes only 2 args for simplicity
Run Code Online (Sandbox Code Playgroud)
应该导致
container = std::tuple<std::map<int, int>, std::map<short, short>>
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?问题是你可以找出容器有多少模板args.
编辑:如果您需要在大小为N的元组中传递其他参数,那就没问题
ContainerTemplate<std::map, std::tuple<int, int>, std::tuple<short, short>>
Run Code Online (Sandbox Code Playgroud)
Edit2:所以我实际上找到了一种确定模板模板参数数量的方法
template<typename... T>
struct TypeList
{
static const size_t Size = sizeof...(T);
template<typename T2>
struct PushFront
{
typedef …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试将新的 C++20 协程与 boost::asio 一起使用。然而,我正在努力找出如何实现自定义可等待函数(例如 boost::asio::read_async)。我试图解决的问题如下:
我有一个连接对象,我可以在其中发出多个请求并注册响应的回调。不保证响应会按照请求的顺序到达。我尝试用自定义的可等待包装回调,但是我无法在协程中 co_await ,因为 boost::asio::awaitable 中没有适用于我的可等待类型的await_transform。
我尝试将回调包装成可等待的代码改编自此处: https://books.google.de/books ?id=tJIREAAAQBAJ&pg=PA457
auto async_request(const request& r)
{
struct awaitable
{
client* cli;
request req;
response resp{};
bool await_ready() { return false; }
void await_suspend(std::coroutine_handle<> h)
{
cli->send(req, [this, h](const response& r)
{
resp = r;
h.resume();
});
}
auto await_resume()
{
return resp;
}
};
return awaitable{this, r};
}
Run Code Online (Sandbox Code Playgroud)
我尝试调用一个 boost 协程,如下所示:
boost::asio::awaitable<void> network::sts::client::connect()
{
//...
auto res = co_await async_request(make_sts_connect());
//...
}
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
error C2664: 'boost::asio::detail::awaitable_frame_base<Executor>::await_transform::result boost::asio::detail::awaitable_frame_base<Executor>::await_transform(boost::asio::this_coro::executor_t) …Run Code Online (Sandbox Code Playgroud) 我有一个工具来生成一些cpp和头文件,并希望使用ADD_CUSTOM_COMMAND添加它以在构建期间自动执行它并将文件添加到项目中.问题是预先不知道(大多数)输出文件的名称.我如何添加这些文件?
在我的应用程序中,Lua脚本可以订阅来自客户端的某些事件.也可以让一个脚本订阅多个客户端.目前,我每次要调用脚本时都会设置全局"客户端",以便脚本可以访问进行回调的客户端.我想要的是类似于C++中的本地线程,这样我就可以为每个客户端创建一个新的Lua线程,并为该线程设置一次"Client"变量.如果客户端然后触发事件,它将只使用与之关联的线程.
TLDR:Lua中的变量是否可能只在特定的Lua线程中有效?