C++ 使用模板类绑定类型元数据c++;

C++ 使用模板类绑定类型元数据c++;,c++,templates,C++,Templates,我有许多数据类型,其中有一些与之相关的元数据,比如表大小和格式。我想使用模板查找来获取此元数据,即 struct C1 {} struct C2 {} enum class Format { Format1, Format2, }; template<typename T, int A, Format F> class DataTypeMeta { constexpr int table_size = A; constexpr Format

我有许多数据类型,其中有一些与之相关的元数据,比如表大小和格式。我想使用模板查找来获取此元数据,即

struct C1
{}
struct C2
{}    
enum class Format
{
    Format1,
    Format2,
};

template<typename T, int A, Format F>
class DataTypeMeta
{
    constexpr int table_size = A;
    constexpr Format data_format = F;
};

class Bar
{
public:
    void Configure(Format f, int sz);

    template<typename T>
    void UploadData(std::vector<T> data){...}
} 
template<typename T>
Bar foo(vector<T> data)
{
   Bar obj;
   obj.Configure(DataTypeMeta<T>::format, DataTypeMeta<T>::table_size);
   obj.UploadData(data);

   return obj;
}

int main()
{
  std::vector<C1> data;
  foo(data);
}
结构C1 {} 结构C2 {} 枚举类格式 { 格式1, 格式2, }; 模板 类DataTypeMeta { constexpr int table_size=A; constexpr Format data_Format=F; }; 分类栏 { 公众: 无效配置(格式f,int sz); 模板 无效上载数据(std::vector data){…} } 模板 Bar-foo(矢量数据) { Bar obj; 配置(DataTypeMeta::format,DataTypeMeta::table_size); 对象上传数据(数据); 返回obj; } int main() { std::矢量数据; foo(数据); }
我如何实现这个DataTypeMeta类或将其专门化为C1、C2等类型

您似乎想以某种方式实现traits: 看见
更多解释(或搜索特征)

为什么?您可以轻松地将
表格大小
数据格式
添加到
C1
C2
,而无需任何额外的类。