变分模板递归构造函数问题
Variadic template recursive constructor problems
我试图理解使用可变模板的递归构造函数。
在下面的代码中,我想实现一个具有可变传递值的递归构造函数。
template <class T, class... T2>
struct Tuple{
T value;
Tuple(T n){ //constructor if only one value left
value = n;
}
Tuple(T n, T2... re){ //constructor if more than one value left
T value = n;
//Tuple(rest...); doesnt work for me
}
};
int main(){
Tuple<int, float, int> t(2, 1.2, 9);
std::cout << t.value << "n"; //2
std::cout << t.rest.value << "n"; //1.2
std::cout << t.rest.rest.value << "n"; //9
}
您还必须从Tuple<T2...>
继承
template <class T, class... T2>
struct Tuple : public Tuple<T2...>
并初始化初始化列表中的继承类(在value
之前([未测试警告码]
Tuple(T n, T2... re) : Tuple<T2...>{re...}, value{n}
{ }
您还需要一个基本情况专门化来停止递归
template <class T>
struct Tuple<T>
{
T value;
Tuple (T n) : value{n}
{ }
};
或者(也许更简单(
template <>
struct Tuple<>
{ };
但对于第二种解决方案,您必须将Tuple
定义为接收零个或多个类型;可能有如下
template <typename...>
struct Tuple
{ };
template <class T, class... T2>
struct Tuple<T, T2...> : public Tuple<T2...>
{
// ...
};
这样,当Tuple
接收到至少一种类型时,选择专用化;当接收到零类型时,只有主版本匹配并作为基本情况。
相关文章:
- 变分模板递归构造函数问题
- C++重载构造函数问题
- 迷宫构造函数问题 [线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)]
- 构造函数问题<无法读取内存>
- 构造函数问题
- 另一个类中的类的构造函数问题
- 类构造函数问题
- 遇到构造函数问题
- C++ STM32用户定义的类构造函数问题
- 模板嵌套类的构造函数问题(复制 ctor 似乎覆盖了其他 ctor)
- 布尔构造函数问题的动态数组
- C++ 构造函数问题 // 继承的类
- C++:构造函数问题
- 类没有复制构造函数问题
- C++重载构造函数问题
- C++构造函数问题
- 在我的程序中"无符号"之前的预期主表达式(析构函数和构造函数问题)
- 复制构造函数问题C++:"0xC0000005: Access violation writing location 0x00000000."
- c++成员函数和构造函数问题
- c++派生类构造函数问题