使用可变参数模板计算元组大小时大小错误
Getting wrong size when calculating tuple size using variadic templates
在查看 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() };
};
在查看 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() };
};