多参数包——如何
Multiple parameter packs -- how?
我有以下问题:
#include <vector>
#include <tuple>
using namespace std;
template< size_t... N_i, typename Ts... >
class A
{
// ...
private:
std::vector<size_t> _v = { N_i... };
std::tuple<Ts...> _t;
};
int main()
{
A<1> a;
}
如上所述,我尝试定义多个参数包作为类A
的模板实参。
不幸的是,代码不能编译:
错误:期望在' t '前嵌套名称说明符
如何为这个示例定义多个参数包?
实现最终目标的一种方法是使用嵌套模板:
template< size_t... N_i> class initial_values {
public:
template <typename Ts...>
class A
{
// ...
private:
std::vector<size_t> _v = { N_i... };
std::tuple<Ts...> _t;
};
};
模板可以被引用,例如:
initial_values<1,2,3>::A<int, char> a;
考虑错误:
期望在' t '前嵌套名称说明符
这是因为你写了:
template< size_t... N_i, typename Ts... >
代替:
template< size_t... N_i, typename... Ts >
也就是说,即使你修复了它,代码也无法编译。
这是因为你不能像以前那样混合两个参数包。
你必须重构你的代码,使它们能够以某种方式从上下文中推断出来。
std::index_sequence
和部分专门化,如下所示:
#include <vector>
#include <tuple>
#include<functional>
using namespace std;
template< typename... >
class A;
template< size_t... N_i, typename... Ts >
class A<index_sequence<N_i...>, Ts...>
{
// ...
private:
std::vector<size_t> _v = { N_i... };
std::tuple<Ts...> _t;
};
int main()
{
A<index_sequence<1>> a;
}
相关文章:
- 如何反转整数参数包
- 如何使用默认参数等选择模板专业化
- 如何使用Luacneneneba API正确读取字符串和表参数
- 如何将enable-if与模板参数和参数包一起使用
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 如何将 I->getType() 作为参数传递给 llvm 中的 CreateCall?
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 如何将参数传递给正在使用模板的类
- 如何制作一个将函数作为参数的类方法
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 如何创建长度由常量参数指定的数组
- 如何将lambda作为模板类的成员函数参数
- 如何使用字符串文字作为宏参数
- 如何通过参数抛出错误消息
- 对可变参数使用声明.如何选择正确的功能
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 模板元编程:如何将参数包组合成新的参数包
- 如何参数化用作另一个 lambda 参数的 lambda
- 如何参数化构造函数的参数数