私はこれをしばらく前から把握するのに苦労していました。N次元ベクターのための再帰的バリアリテンプレート関数
私がしたいのは、任意の数の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次元文字列ベクトルを返します。これらの文字列ベクトルは、それらの文字で区切られて挿入されます。それから私は、n次元のベクトルを返すために、この機能を期待する
std::string data = "1:2:3;4:5:6;7:8:9-10:11:12;13:14:15;16:17:18"
(文字列型でテンプレート化)このようにアクセス可能性がある:例えば、私が合格のstd ::文字列はこのようになっていることを言うことができます:これは行うことは難しいことではありません
info[0][0][0] // = 1
info[1][0][0] // = 10
info[1][1][1] // = 14
info[1][2][2] // = 18
// etc.
がベクトルの大きさは(ちょうどループのための多くを使用します)事前にわかっている場合、データが区切り文字の任意の数が含まれている場合、それは非常に困難になります(ベクトルは任意の次元になり得ることを意味する)。 これは再帰的なバリデーションテンプレートで可能ですか?もしそうなら、私は正直にどこから始めたらいいのかわかりません。
うわー、絶対に素晴らしい。ここで何が起こっているのかを完全に理解するには、しばらく時間がかかりますが、私は本当に感心しています。すごい仕事! – JohnTravolski