如何使用返回第 n 个元素的方法创建元组
How to create a tuple with a method that returns the n'th element
代码:
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 ) );
为什么??
依赖名称,您应该添加template
:
return baseTuple.template Entry<ArgumentNumber - 1>();
相关文章:
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何使用返回第 n 个元素的方法创建元组
- 工厂方法创建的对象应该在哪里删除?
- 如何发送通过绑定到函数/方法创建的函数对象?
- CPP:如何使用需要指针的方法创建线程
- 如何使用 C++ 方法创建 JSON 文件
- 电子内部或外部方法创建自己的右键单击上下文菜单 - Windows
- 如何使用工厂方法创建不同的对象
- 在C++/WRL中使用静态方法创建WinRT组件
- 我可以有一个仅使用工厂方法创建的成员变量吗?
- 为类方法创建模板
- 使用 wxBitmap::NewFromPNGData 方法创建位图会导致 wxWidgets 3.0 中的断言
- 如何在C++中为模板化类中的单个方法创建专用化
- 在 c/c++ 中为有限差分方法创建五边形稀疏矩阵的最佳方法是什么?
- 用c++方法创建模板类
- c++虚方法:必须在父类中为父类和子类不共享的每个方法创建一个虚方法吗?
- C++ 使用 "new" 或其他创建动态数组的方法创建类似静态数组
- 在Turtle中为常量方法创建Mock
- 在c++中使用try和catch方法创建一个函数来获取用户名
- 访问同一类的另一个方法中的一种方法.创建动态数组C++