具有零参数的模板说明符
Template Specifier With Zero Parameters
>我有一个类似于以下内容的类定义:
template< typename A, typename... B >
struct S {
//...//
};
但我想像这样(有效地)创建一个重载:
template<>
struct S<> {
//...//
};
然而,上述内容显然是非法的,我不能使用varidic模板,并将零参数传递给它,因为这可能与第一个定义(和不良做法)模棱两可。有没有办法在C++中创建参数为零的模板说明符?
问题是您正在尝试创建与主模板不匹配的部分专用化(主模板至少需要一个参数)。 如果要使用可变参数模板,可以改为执行以下操作:
template <typename... A>
struct S {
// One-or-more case
};
template <>
struct S<> {
// Zero case
};
根据评论,发帖人希望找到非空案例的第一个参数;对此的修改是:
template <typename... A>
struct S;
template <>
struct S<> {
// Zero case
};
template <typename A, typename... B>
struct S<A, B...> {
// One-or-more case
};
相关文章:
- 如何反转整数参数包
- 激励'inline'说明符的真实世界示例?
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 参数包内 noexcept 说明符
- C++fmt库,只使用格式说明符格式化单个参数
- 使用自动说明符获取 lambda 的参数类型
- Clang和GCC在转换C++17中非类型模板参数的自动说明符中存在分歧
- 带有“class”详细类型说明符的方法参数
- "%p 格式说明符的参数类型是 'void*'"是什么意思?
- 具有零参数的模板说明符
- 为什么参数与printf未定义行为中的转换说明符不匹配
- 函数参数是否允许静态说明符
- 使用子类作为基类的模板参数和嵌套名称说明符
- 模板参数作为函数说明符和编译器优化
- 不带变量说明符的模板参数上的SFINAE(enable_if)
- 错误:参数声明的存储类说明符无效