25#include "AstUtil/Dimension.hpp"
26#include "AstUtil/VariantVector.hpp"
48 template<
typename T,
typename MemberType, MemberType T::*Member>
53 auto span = data.
asSpan<
const T>();
54 if (!span.data())
return -1;
55 using ElementType =
typename std::remove_cv<typename std::remove_reference<MemberType>::type>::type;
56 element.reset<ElementType>(span.size());
57 auto* out = element.as<ElementType>();
59 for (
size_t i = 0; i < span.size(); ++i)
60 out[i] = span[i].*Member;
69 template<
typename T,
typename Ret, Ret (T::*Getter)() const>
74 auto span = data.
asSpan<
const T>();
75 if (!span.data())
return -1;
76 using ElementType =
typename std::remove_cv<typename std::remove_reference<Ret>::type>::type;
77 element.reset<ElementType>(span.size());
78 auto* out = element.as<ElementType>();
80 for (
size_t i = 0; i < span.size(); ++i)
81 out[i] = (span[i].*Getter)();
100 const std::vector<DataElement>&
getElements()
const {
return elements_; }
108 void addAlias(
const char* alias,
const char* name);
114 template<
typename T,
typename MemberType, MemberType T::*Member>
120 element.
setExtractFunc(detail::makeExtractFunc<T, MemberType, Member>());
128 template<
typename T,
typename Ret, Ret (T::*Getter)() const>
134 element.
setExtractFunc(detail::makeExtractFunc<T, Ret, Getter>());
139 std::vector<DataElement> elements_{};
140 std::vector<std::pair<std::string, std::string>> aliasMap_{};
143const int i =
sizeof(DataElements);
ElementExtractFunc makeExtractFunc()
生成成员变量提取函数
定义 DataElements.hpp:49
数据元素 — 封装数据提取逻辑的可配置单元
定义 DataElement.hpp:53
void setExtractFunc(ElementExtractFunc extractFunc)
注册数据提取函数
定义 DataElement.cpp:32
void setName(const char *name)
设置数据元素名称
定义 DataElement.hpp:69
void setDimension(Dimension dimension)
设置数据元素的量纲
定义 DataElement.hpp:77
数据元素容器
定义 DataElements.hpp:90
void addElement(const char *name, Dimension dimension=Dimension::Unit())
添加数据元素(成员变量版本)
定义 DataElements.hpp:115
const std::vector< DataElement > & getElements() const
获取所有数据元素
定义 DataElements.hpp:100
变类型向量容器
定义 VariantVector.hpp:59
Span< T > asSpan()
获取类型化 Span 视图(非拥有)
定义 VariantVector.hpp:556
errc_t(* ElementExtractFunc)(const VariantVector &data, VariantVector &element)
数据提取函数指针类型
定义 DataElement.hpp:40