2016-11-11 2 views
0

ポイントタイプに関係なく、テンプレートクラスを使用して関数を使用しようとしています。私は "新しいPCLクラスを書く"チュートリアルを読んだが、それは得られていない。私はこのテクニックを使用しようとしている最もシンプルなクラスを共有します。その唯一の機能は、プロセスの親ツリーの実行の正しいポイントにポイントクラウドのKDツリーを作成することです。異なるポイントタイプのpcl :: PointCloudオブジェクトを処理するためのクラステンプレート

KdtreeBuilder_Process.h

#ifndef KDTREEBUILDER_PROCESS_H 
#define KDTREEBUILDER_PROCESS_H 
#include "ProcessManager/ProcessConcurrent.h" //Parent class 
#include <pcl/kdtree/kdtree_flann.h> 

class KdtreeBuilder_Process:public ProcessConcurrent 
{ 
public: 
    KdtreeBuilder_Process(pcl::PointCloud<pcl::PointXYZ>::Ptr inputCloud,pcl::KdTree<pcl::PointXYZ>::Ptr cloudKdtree); 
    virtual void run(); //method that executed when the process starts 
private: 

    pcl::PointCloud<pcl::PointXYZ>::Ptr mInputCloud; 
    pcl::KdTree<pcl::PointXYZ>::Ptr mCloudKdtree; 
}; 

#endif // KDTREEBUILDER_PROCESS_H 

KdtreeBuilder_Process.cpp

#include "KdtreeBuilder_Process.h" 

KdtreeBuilder_Process::KdtreeBuilder_Process(pcl::PointCloud<pcl::PointXYZ>::Ptr inputCloud,pcl::KdTree<pcl::PointXYZ>::Ptr cloudKdtree): 
    mInputCloud(inputCloud),mCloudKdtree(cloudKdtree) 
{ 

} 

void KdtreeBuilder_Process::run(){ 
    mCloudKdtree->setInputCloud(mInputCloud); 
} 

私の意図は、XYZはあなたのサポートのために

感謝をコーディネート含まれている任意のポイントタイプで、このクラスを使用できるようにすることです。 BR

答えて

0

私はこの問題を解決します。

KdtreeBuilder_Process.h解答する@ W.Fため

#ifndef KDTREEBUILDER_PROCESS_H 
#define KDTREEBUILDER_PROCESS_H 
#include "ProcessManager/ProcessConcurrent.h" 
#include "PointDefinitions.h" 
#include <pcl/kdtree/kdtree_flann.h> 
#include <QDebug> 

template<class PointType> 
class KdtreeBuilder_Process:public ProcessConcurrent 
{ 
    typedef typename pcl::PointCloud<PointType>::Ptr PointCloudPtr; 
    typedef typename pcl::KdTree<PointType>::Ptr KdTreePtr; 

public: 

    KdtreeBuilder_Process(PointCloudPtr inputCloud,KdTreePtr cloudKdtree): mInputCloud(inputCloud), mCloudKdtree(cloudKdtree) { } 
     virtual void run(){ 
      mCloudKdtree->setInputCloud(mInputCloud); 
     } 
    private: 

     PointCloudPtr mInputCloud; 
     KdTreePtr mCloudKdtree; 
}; 

#endif // KDTREEBUILDER_PROCESS_H 
0

まず、テンプレートを扱う際には、すべての実装をヘッダファイルに移動する必要があるということを受け入れる必要があります。あなたはKdtreeBuilder_Processは、あなただけの適切なテンプレート宣言構文を追加する必要があるパラメータでのポイントのクラスを取るテンプレートにしたい場合:PointCloudクラスはXYZとすべてのクラスを受け入れる準備ができている場合

template<class PointType> 
class KdtreeBuilder_Process:public ProcessConcurrent 
{ 
public: 

あなたは自分を変更する必要が座標コードに応じて

KdtreeBuilder_Process(pcl::PointCloud<PointType>::Ptr inputCloud,pcl::KdTree<PointType>::Ptr cloudKdtree): mInputCloud(inputCloud), mCloudKdtree(cloudKdtree) { } 
    virtual void run(){ 
     mCloudKdtree->setInputCloud(mInputCloud); 
    } 
private: 

    pcl::PointCloud<PointType>::Ptr mInputCloud; 
    pcl::KdTree<PointType>::Ptr mCloudKdtree; 
}; 

幸運を祈る!

+0

ありがとう:ここだけのヘッダーファイルを使用して、最終的なソリューションです。単純に見えますが、私はコンストラクタのパラメータに問題があります。 boosted共有ポインタをテンプレートクラスのコンストラクタに含めることはできませんか?私はエラーがあります "C2061:構文エラー:識別子 'Ptr'" –

関連する問題