n 次元のデータセットを分析するコードを書いています。任意のデータセットの軸を表すクラスを作成しました。すべての軸は異なるデータ型を持つことができるため、テンプレート プログラミングを使用することにしました。
class BaseAxis
{
};
template <class T>
class Axis : public BaseAxis
{
public:
Axis(const T &begin, const T &end);
const T begin;
const T end;
};
これにより、任意の型の新しい Axis オブジェクトを作成できます。ユーザーは、次のように正しい軸を追加することで、データセット全体を表すより高レベルのクラス NTree を構成できます。
ntree = new ntree::NTree<float>();
ntree->AddAxis<int>(0, 8);
ntree->AddAxis<float>(-100.0f, 200.0f);
これにより、0 から 8 までの範囲の整数軸と -100.0f から 200.0f までの範囲の浮動小数点軸を持つ 2 次元の浮動小数点データセットが作成されます。データセットから値を取得するには、次のようにデータ構造を照会できる必要があります。
ntree->Query(2, 2.5f);
私は現在、そのような関数 (またはこれらのパラメーターを表すことができるオブジェクト) を作成する方法を見つけようとしています。boost::variant について読んだことがありますが、c++ テンプレートとライブラリの経験が十分でないため、この場合にこれを適用する方法がわかりません。
NTree クラスのコードの関連部分を次に示します。
template <class T>
class NTree
{
public:
NTree();
~NTree();
template <class A>
void AddAxis(const A &start, const A &end);
protected:
std::vector<BaseAxis*> *axes;
};
template <class T>
template <class A>
void NTree<T>::AddAxis(const A &start, const A &end)
{
BaseAxis* newAxis = new Axis<A>(start, end);
this->axes->push_back(newAxis);
}
したがって、私の質問は次のとおりです。任意の長さと型の組み合わせの値のセットを表す方法は?