【问题标题】:Explanation on c++ template syntaxc++模板语法说明
【发布时间】:2015-02-10 05:58:53
【问题描述】:

我正在查看以下帖子 write a boost::multi_array to hdf5 dataset,但无法理解 Leo Goodstadt 的第一个答案中用于模板的语法。不幸的是,我没有足够的声誉直接评论那里给出的答案,这就是我创建这个单独问题的原因。

据我了解,有一个使用静态方法 type() 创建的结构,该方法返回相应的类型。

这个通用结构然后被具有固定类型的结构覆盖。但是花括号中到底写了什么,即它的含义是什么?例如,以下是什么意思:

{ H5::IntType type {   H5::PredType::NATIVE_CHAR
                   };  
};

在字符模板的第一个定义内:

template<> struct get_hdf5_data_type<char> {   
     H5::IntType type {   
         H5::PredType::NATIVE_CHAR       
    };  
};

我在下面复制了模板定义的基本部分,但可能更容易查看原始帖子以获得清晰的图片。

template<typename T> struct get_hdf5_data_type {   
    static H5::PredType type() {   
        //static_assert(false, "Unknown HDF5 data type"); 
        return H5::PredType::NATIVE_DOUBLE; 
    }
};
template<> struct get_hdf5_data_type<char> {   
    H5::IntType type { H5::PredType::NATIVE_CHAR };  
};
template<> struct get_hdf5_data_type<long long> {   
     H5::IntType type { H5::PredType::NATIVE_LLONG };  
};
template<> struct get_hdf5_data_type<unsigned long long> {   
     H5::IntType type { H5::PredType::NATIVE_ULLONG };  
};
template<> struct get_hdf5_data_type<int8_t> {   
    H5::IntType type { H5::PredType::NATIVE_INT8 };  
};

【问题讨论】:

  • 不幸的是,我没有足够的声誉直接评论那里给出的答案,这就是我创建这个单独问题的原因。 - 哈利路亚,系统有效!问题确实属于新问题。

标签: c++ templates


【解决方案1】:

卷曲语法是初始化

H5::IntType type    {   H5::PredType::NATIVE_CHAR       };

类似于

H5::IntType type = H5::PredType::NATIVE_CHAR;

我不熟悉 H5,但 OP 将其用作 hdf_data_type.type,这只是指先前在您的专业列表中定义的特定类型。

现在hdf_data_type 需要是提供的模板特化之一,例如get_hdf5_data_type&lt;char&gt; 以提供类型的定义。

通用模板中被注释掉的 static_assert 可用作未找到已知特化且对象hdf_data_type 无用的标记。

【讨论】:

  • 感谢您的回答,语法现在对我来说很清楚了。但是方法 type() 不是没用吗,因为当没有找到已知的特化时,你会得到一个函数指针而不是一个类型?
  • 我尝试编译 OP 的代码,但似乎这种语法不起作用,因为编译失败:main.cpp:32:15: error: function definition does不声明参数
  • @Udo 至于你的第一个问题,这将取决于使用情况,但我的印象是,目的是使用 static_assert 使编译失败。并且不同的专业是不相关的类型。至于 2 - 它可能值得一个新问题,因为我无法推断出错误指的是哪一行。
猜你喜欢
  • 2012-11-16
  • 2011-06-22
  • 2018-01-02
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多