c++ - 使用可变参数模板计算元组大小时出现错误大小
问题描述
我正在尝试编写自己的 tuple_size 函数实现,然后再查看它是如何在 C++ 库中实现的。我现在遇到的问题是我得到了错误的答案(1),我没有看到任何先决条件。感谢任何帮助。
#include <iostream>
using namespace std;
namespace tuple_helpers
{
template <typename... Args>
struct _tuple_size;
template<typename T, typename... Args>
class _tuple_size<T, Args...>
{
public:
constexpr static size_t __size()
{
return _tuple_size<Args...>::__size() + 1;
}
};
template<>
class _tuple_size<>
{
public:
constexpr static size_t __size()
{
return 0;
}
};
template<typename T>
class tuple_size
{
public:
enum { value = _tuple_size<T>::__size() };
};
}
int main()
{
using MyTuple = tuple<int, string, bool, double>;
cout << "Size of the tuple is: " << tuple_helpers::tuple_size<MyTuple>::value;
return 0;
}
解决方案
_tuple_size<ARGS>::__size()
就像sizeof...(ARGS)
。由于您只传递一个模板参数,因此它始终为 1。
您需要实际使用模板的模板参数:
template<typename T>
class tuple_size;
template<typename... Args>
class tuple_size<std::tuple<Args...>> {
public:
enum { value = _tuple_size<Args...>::__size() };
};
// Or to work with any tuple-like classes
template<typename... Args, template<typename...> class Tuple>
class tuple_size<Tuple<Args...>> {
public:
enum { value = _tuple_size<Args...>::__size() };
};