【问题标题】:Getting wrong size when calculating tuple size using variadic templates使用可变参数模板计算元组大小时出现错误大小
【发布时间】:2019-08-22 12:06:32
【问题描述】:

我正在尝试编写自己的 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;
}

【问题讨论】:

标签: c++ tuples c++17 variadic-templates


【解决方案1】:

_tuple_size&lt;ARGS&gt;::__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() };
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多