【发布时间】:2021-02-12 23:10:28
【问题描述】:
我正在尝试创建一个 Tuple 类,其中包含任意数量的任意类型的条目,使用可变参数模板并能够使用模板化的 entry 方法获取 nth 条目,因此我可以使用它如下:
Tuple<int, int, std::string, double> t(1, 2, "Hello World", 3.4);
std::cout << t.entry<1>() << std::endl; // Prints 2
std::cout << t.entry<2>() << std::endl; // Prints "Hello World"
我目前的做法:
template<typename ...Types>
struct Tuple;
template<typename Type>
struct Tuple<Type>
{
Tuple(Type value) : value(value) { };
Type value;
template<int Index>
Type& entry()
{
return value;
}
};
template<typename Type, typename... Types>
struct Tuple<Type, Types...> : public Tuple<Types...>
{
Tuple(Type value, Types ...args) : Tuple<Types...>(args...), value(value) { }
Type value;
template<int Index>
auto entry() -> decltype(Tuple<Types...>::entry<Index-1>())&
{
return Tuple<Types...>::entry<Index-1>();
}
template<>
Type& entry<0>()
{
return value;
}
};
第一个结构为一个元素提供“基本”情况,第二个结构在此基础上递归构建。但是,我得到了错误
In member function ‘decltype (((Tuple<Types ...>::entry < (Index - 1)) > <expression error>))& Tuple<Type, Types ...>::entry()’:
error: expected primary-expression before ‘)’ token
如何调用模板化基类的模板化方法?
【问题讨论】:
-
struct Tuple的初始声明在哪里?这些都是专业。
标签: c++ templates variadic-templates template-meta-programming non-type-template-parameter