c++ - 使用模板模板函数获取模板参数的数量
问题描述
我不确定这是否可能,但我想计算任何类的模板参数的数量,例如:
template <typename T>
class MyTemplateClass { ... };
template <typename T, typename U>
class MyTemplateClass2 { ... };
这样template_size<MyTemplateClass>() == 1
和template_size<MyTemplateClass2>() == 2
。我是模板模板的初学者,所以我想出了这个当然不起作用的功能:
template <template <typename... Ts> class T>
constexpr size_t template_size() {
return sizeof...(Ts);
}
因为Ts
不能引用。我也知道在处理变体模板时可能会出现问题,但事实并非如此,至少对于我的应用程序而言。
提前谢谢
解决方案
#include <utility>
#include <iostream>
template<template<class...>class>
struct ztag_t {};
template <template<class>class T>
constexpr std::size_t template_size_helper(ztag_t<T>) {
return 1;
}
template <template<class, class>class T>
constexpr std::size_t template_size_helper(ztag_t<T>) {
return 2;
}
template <typename T>
class MyTemplateClass { };
template <typename T, typename U>
class MyTemplateClass2 { };
template<template<class...>class T>
struct template_size:
std::integral_constant<
std::size_t,
template_size_helper(ztag_t<T>{})
>
{};
int main() {
std::cout << template_size<MyTemplateClass>::value << "\n";
std::cout << template_size<MyTemplateClass2>::value << "\n";
}
如果不写出 N 个重载来支持最多 N 个参数,我就没有办法。
当然,反思会使这变得微不足道。