gpt4 book ai didi

c++ - 如何使用返回第 n 个元素的方法创建元组

转载 作者:行者123 更新时间:2023-11-28 04:37:05 26 4
gpt4 key购买 nike

<分区>

代码:

    template< typename... TemplateArguments >
class Tuple
{}

template< typename ExposedType, typename... TemplateArguments >
class Tuple< ExposedType, TemplateArguments... > : public Tuple< TemplateArguments... >
{
public:

template < uint64_t ArgumentNumber >
typename std::enable_if< ArgumentNumber != 1, typename TypeHolder< ArgumentNumber, Tuple< ExposedType, TemplateArguments... > >::m_type& >::m_type Entry();

template < uint64_t ArgumentNumber >
typename std::enable_if< ArgumentNumber == 1, typename TypeHolder< 1, Tuple< ExposedType > >::m_type& >::m_type Entry();

ExposedType m_data;

};

template< uint64_t ArgumentNumber, typename ExposedType >
class TypeHolder
{};

template< typename ExposedType, typename... TemplateArguments >
class TypeHolder< 1, Tuple< ExposedType, TemplateArguments... > >
{
public:

typedef ExposedType m_type;

};

template< uint64_t NumberOfArguments, typename ExposedType, typename... TemplateArguments >
class TypeHolder< NumberOfArguments, Tuple< ExposedType, TemplateArguments... > >
{
public:

typedef typename TypeHolder< NumberOfArguments - 1, Tuple< TemplateArguments... > >::m_type m_type;

};

以及入口方法的实现:

    template< typename ExposedType, typename... TemplateArguments >
template < uint64_t ArgumentNumber >
typename std::enable_if< ArgumentNumber != 1, typename TypeHolder< ArgumentNumber, Tuple< ExposedType, TemplateArguments... > >::m_type& >::m_type Tuple< ExposedType, TemplateArguments... >::Entry()
{
Tuple< TemplateArguments... >& baseTuple = *this;

return ( baseTuple.EntryL< ArgumentNumber - 1 >() );
}

template< typename ExposedType, typename... TemplateArguments >
template < uint64_t ArgumentNumber >
typename std::enable_if< ArgumentNumber == 1, typename TypeHolder< 1, Tuple< ExposedType > >::m_type& >::m_type Tuple< ExposedType, TemplateArguments... >::Entry()
{
return ( m_data );
}

要点是创建一个元组对象,它有一个返回对所需元素的引用的方法,使用时应该是这样的:

Tuple< int, int > tuple_1( 8, 10 );

tuple_1.Entry< 1 >() = 14;

尝试编译时出现错误:

error: expected primary-expression before ‘)’ token

return ( baseTuple.Entry< ArgumentNumber - 1 >() );
^

谁能帮忙解决这个问题?或者展示正确的方法如何做到这一点?

谢谢!!

编辑:

如果我添加 true 它会起作用:

return ( baseTuple.EntryL< ArgumentNumber - 1 >( true ) );

为什么??

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com