c++ - 可变参数模板。可变参数模板数据结构中模板参数列表的大小
问题描述
我有一个tuple
样式可变参数模板数据类型。我想获取tuple_size
获取模板参数数量的类型函数。但是,我无法让以下工作正常进行。
template<typename... T>
struct A
{
};
template<typename T, typename ...S>
struct A<T, S...>
{
T t;
A<S...> s;
};
template<typename T>
size_t size_A()
{
return 1;
}
template<typename T, typename... S>
size_t size_A()
{
return 1 + size_A<S...>();
}
int main() {
A<int,double,uint> a {2,3.5,10};
constexpr size_t n = size_A<decltype(a)>();
std::cout << n << std::endl;
}
我收到以下错误:
error: call of overloaded ‘size_A<A<int, double, unsigned int> >()’ is ambiguous
constexpr size_t n = size_A<decltype(a)>();
note: candidate: ‘size_t size_A() [with T = A<int, double, unsigned int>; size_t = long unsigned int]’
size_t size_A()
^~~~~~
note: candidate: ‘size_t size_A() [with T = A<int, double, unsigned int>; S = {}; size_t = long unsigned int]’
size_t size_A()
^~~~~~
如何区分有参数包和没有参数包?
以下确实有效,但我只想使用该类型而不必找到该类型的实例。实际问题将具有类型,并且可能没有该类型的实例。
template<typename T>
constexpr size_t size(const A<T>& t)
{
return 1;
}
template<typename T, typename... S>
constexpr size_t size(const A<T,S...>& t)
{
return 1 + size(t.s);
}
这与给定类型实例的可变模板函数不同。
我该如何进行size_A
工作,tuple_size
以便仅按类型获取模板参数的数量?
解决方案
推荐阅读
- r - 如何一次查询具有多个关键字的 Mongo 数据库?
- python - 我可以使用 tensorflow-hangul-recognition 制作 Unity 插件吗
- python - 在 PySpark 的列名中使用带有特殊字符的镶木地板文件
- html - 滚动时我的导航栏上出现白色间隙
- sql - MS Access 中的某些隐藏字符是否有问题?
- c++ - C++ Vigenere 和 Caesar 密码在同一编程中使用 switch case
- cassandra - 将 Cassandra OSS 4.0 RC1 节点添加到具有 DSE 6.0.14 节点的集群中
- wordpress - 防止在子路由中将 cookie 发送到 wordpress
- c# - 拉取访问被拒绝,存储库不存在或可能需要授权:服务器消息:不足的范围:授权失败
- jenkins - 如何在 Jenkins 中获取所有提升的构建