根据条件选择结构
Choose structs based on condition
我正在尝试读取一个带有头和点记录的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.
如果您想要具有预定义位置的不同类型的矢量
使用结构。
相关文章:
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- C++ 带有默认参数的结构,可选择在构造函数中更改
- 使用选择排序对数组数据结构进行排序,但它不起作用
- 在 c++ 中使用字符串变量选择静态类结构,而不带对象
- 如何选择排序一些结构
- 对于这个问题,是否有更好的数据结构和算法选择
- 如何根据条件选择结构
- 有没有一种方法可以在基于枚举的可变参数模板函数之间进行选择,这比将函数包装在结构中更简单
- 根据输入类型选择正确的结构方法
- 对于树结构"widget"比"shared_ptr"更好的选择?
- 哪种数据结构和设计用于选择最佳整数集
- 一般来说,如何在C++中的结构和类之间进行选择
- 数据结构-选择排序方法
- 使用 QPair 和 QString 选择正确的数据结构
- 努力使用模板化结构选择类型
- 如何通过自定义选择底层容器来创建树结构
- 根据条件选择结构
- 选择使用结构数组进行排序
- 有关结构选择的模板错误
- 让编译器根据体系结构选择乘法算法