我正在编写代码来分析 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。要从数据集中获取值,您应该能够按如下方式查询数据结构:
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);
}
因此我的问题如下:如何表示一组任意长度和类型组合的值?