根据条件选择结构

Choose structs based on condition

本文关键字:结构 选择 条件      更新时间:2023-10-16

我正在尝试读取一个带有头和点记录的las文件。标头包含点格式信息,该信息可以在0到3之间变化,从而导致具有额外字段的不同格式。

LasReader.h

template <typename T>
class las_reader
{
public:
    las_reader();
    las_reader(std::ifstream &FileHandle);
    ~las_reader();
private:
    las_header_reader lh; // struct to read las header info
    std::vector<T> lp; // vector of struct template T to read las points
    void lasReadHeader(std::ifstream &FileHandle);
    void lasReadPoints(std::ifstream &FileHandle);
};

LasReader.cpp

template <typename T>
void las_reader<T>::lasReadPoints(std::ifstream &FileHandle)
{ 
    // reserves the size of vector
    lp.resize(lh.num_pointRecords);
    FileHandle.seekg(lh.offset_pointData,std::ios::beg);
    // iterator which goes through file and reads to vector
    FileHandle.read(reinterpret_cast<char*>(&lp[0]),lh.num_pointRecords *sizeof(T));
}

现在我想根据条件放置结构格式作为模板。我尝试了在T1和T2之间选择C++类型特征的第二个答案中给出的std::conditional,但它在两个模板之间的布尔值上有效。

编辑看起来像这样的东西:

template <typename T, typename U, typename V, typename W> 
struct select_format
{
    typedef typename std::conditional<std::is_base_of<T,las_points_reader>::value, T, U, V, W>::type base_type;

}

如果要根据某些数据选择T

模板参数是在编译时推导出来的,不能在运行时选择。您需要使用继承或Boost.Variant.

如果您想要具有预定义位置的不同类型的矢量

使用结构。