如何给类提供几个可变模板模板参数
How to give several variadic template template arguments to class
我应该如何给下面的类s提供模板模板参数?
#include "tuple"
template<
class C1,
template<class... C3> class C2,
class... C3,
template<class... C5> class C4,
class... C5
> struct S {};
int main() {
S<
int,
std::tuple<int, char>,
std::tuple<double>
> s;
return 0;
}
GCC 4.8.3投诉:
expected a class template, got 'std::tuple<int, char>'
我应该使用什么来代替元组?S必须知道运算符()中的C3,但我不能在那里给出C3,因为boost::mpl::for_each需要运算符()的特定签名。以前我通过将tuple<int, char>()
作为一个正则参数来推导模板来处理这个问题,但在这里这似乎不可能。类似的问题已在https://stackoverflow.com/a/12782697/1226313但这似乎只适用于函数而不适用于类。为了清楚起见,在S的运算符()内部,我想将C3(以及C5、C7等)作为变元函数的参数传递。
您需要提供一个模板,而不是类型:
S<int, std::tuple, /* std::tuple */> s;
模板参数与模板参数不匹配。如果这是主要模板:
template<
class C1,
template<class...> class C2, // note 1
class... C3,
template<class...> class C4, // note 1
class... C5
> struct S {};
// note 1
:我删除了模板模板参数参数包C3
和C5
的名称,因为它们没有任何用途
然后你会实例化这样的模板:
S<
int,
std::tuple,
int, char,
std::tuple,
double
>
但以上方法不起作用,因为任何参数包都必须位于主模板声明中参数列表的末尾。
如果你想实例化这样的模板:
S<
int,
std::tuple<int, char>,
std::tuple<double>
>
然后您需要意识到std::tuple<int,char>
和std::tuple<double>
不是模板。它们是根据模板生成的类。以下主模板将匹配这些参数:
template<
class C1,
class C2,
class C3
> struct S;
如果你想了解元组中的类型,有很多方法可以做到这一点。以下方式可能不是最好的,但它最接近你最初的要求。您可以在主模板后添加部分专业化,当C2
和C3
是std::tuple
:的专业化时使用
// Partial specialisation
template<
class C1,
class... C3,
class... C5
> struct S<
C1,
std::tuple<C3...>,
std::tuple<C5...>
> {
auto operator()() const {
// do something with C1,C3...,C5... here
}
};
相关文章:
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如何返回或护理项目清单基于几个类别
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 我们如何在文本文件中找到C++中的几个单词?
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 具有多个参数的模板化类专用化,其中一个模板参数是模板本身
- 关于 std::bitset 构造函数的几个问题?
- 在 masm x64 上打印具有多个参数
- C++ 具有 2 个模板参数的类,具有 1 个参数的函数
- 可变参数模板作为第一个参数
- 在C++中使用 std::forward 的多个参数
- 几个 Nt 函数在 Windows 7 x32 上返回STATUS_WAIT_0
- 如果条件,当我想第二个参数时
- 如何在新设计中迁移需要几个额外参数的函数
- 如何仅通过几个默认参数
- 如何给类提供几个可变模板模板参数
- 将几个数字作为一个数组参数传递给函数
- 为python导出c++函数,传递几个字符串作为参数