0

私はKd-Tree実装を持っています。これは、0より大きい任意の次元と任意の浮動小数点型(float、doubleなど)を受け入れるようにテンプレート化されています。このようなもの:

template <typename real, size_t dimensions> class KdTree
{
    // stuff
}

また、まったく同じテンプレートレイアウトを持つ「ポイント」タイプが付属しています。ただし、このポイントタイプは、kd-treeクラスの外部からアクセスできる必要があります。これで、kdツリーコード内に一時的なポイントを作成する必要があるたびに、明示的に移動する必要がありますKdPoint<real, dimensions>。これは面倒で、行が非常に長くなり、コードに何の価値も追加されません。

ポイントの値を暗黙的に想定し、そのクラスにも渡されるようにコンパイラーに指示する方法はありますrealdimensions?ある意味で、2つのテンプレートリストをリンクします。入力するだけKdPointで、クラスが受け取ったテンプレート引数に基づいて、コンパイラがそこに何を入れるかを直接知ることができます。

それ以外の場合は、マクロを使用して後者を前者に明示的に展開する必要があります。

4

2 に答える 2

1

KdTreeクラスにtypedefを追加できます。

template <typename real, size_t dimensions> class KdTree
{
  typedef KdPoint<real, dimensions> KdPoint_;
  // stuff
};

KdPoint_内部で使用します。ポイントタイプに外部からアクセスできるようにする場合は、パブリックアクセスと、末尾が:typedefで終わらない名前を指定します。_

template <typename real, size_t dimensions> class KdTree
{
 public:
  typedef KdPoint<real, dimensions> KdPointType;
  // stuff
};

これは、次のようにアクセスできます。

KdTree<float, 5>::KdPointType
于 2012-11-17T12:54:04.210 に答える
1
template <typename real, size_t dimensions> class KdTree
{
    public:
    typedef KdPoint<real, dimensions> point_type;
}
于 2012-11-17T12:54:26.517 に答える