更改变量模板中的最后一个类型
喂食js std::make_index_sequence或std::index_sequence_for 对 于助手来说,结构或函数通常是对包进行非琐碎操作的最简单方法。
要使用所需的类型转换创建一个帮助器结构,首先使用必要的输入声明它,再加上一个额外的类型参数以接受```js std::index_sequence:
namespace foo_detail { template class Container, typename NewFirstT, typename NewLastT, typename IdxSeq, typename ... Tail> struct OutContainerHelper; }
然后进行部分专门化,可以使用任何```js
std::index_sequence:
namespace foo_detail
{
template class Container,
typename NewFirstT,
typename NewLastT,
std::size_t ... I,
typename ... Tail>
struct OutContainerHelper, Tail...>
{
using type = Container...
>;
};
}
那就提供一个js std::make_index_sequence或std::index_sequence_for 作 为帮助程序的模板参数:
template class Container,
typename OldFirstT,
typename T2,
typename... Ts,
typename NewVal>
auto foo(Container t, NewVal const& v) {
using NewLastT = ???;
using OutContainer = typename foo_detail::OutContainerHelper, T2, Ts...
>::type;
OutContainer o;
// fill this new container with v
return o;
}
(追加T2确保Container专门化至少有两个模板参数,因为转换没有意义。如果有人尝试将编译错误与一个只有一个模板参数的模板一起使用,那么编译错误可能会减少一些混乱。)
关于Coliru的工作实例。
赞0
踩0