【发布时间】:2017-07-20 21:05:56
【问题描述】:
我一直在努力解决这个问题,但我似乎无法做到。
我想做的是创建一个模板函数,它需要任意数量的 char 参数参数,然后是单个 std::string 作为参数。示例语法如下所示:
nvec<3, std::string> info = string_to_vec<':', ';', '-'>(data);
nvec 是一个递归模板类,它创建一个以特定类型为模板的 n 维向量。它的代码相当简单,可以在这里看到:
template <size_t dim, typename T>
struct multidimensional_vector
{
typedef std::vector<typename multidimensional_vector<dim - 1, T>::type> type;
};
template <typename T>
struct multidimensional_vector<0, T>
{
typedef T type;
};
template <size_t dim, typename T>
using nvec = typename multidimensional_vector<dim, typename T>::type;
但是,string_to_vec 可能需要任意数量的字符参数(但至少一个)。然后,它需要对这些信息做的是返回一个相应的 n 维字符串向量,其中插入的数据由这些字符分隔。例如,假设我传入的 std::string 如下所示:
std::string data = "1:2:3;4:5:6;7:8:9-10:11:12;13:14:15;16:17:18"
然后我希望这个函数返回一个可以像这样访问的 n 维向量(以字符串类型为模板):
info[0][0][0] // = 1
info[1][0][0] // = 10
info[1][1][1] // = 14
info[1][2][2] // = 18
// etc.
虽然如果提前知道向量的大小(只需使用大量的 for 循环),这并不难做到,但当数据包含任意数量的定界符时(意味着向量可以是任何维度)。 这可能与递归可变参数模板有关吗?如果是这样,我真的不知道从哪里开始。
【问题讨论】:
标签: c++ templates recursion vector variadic