(这里的菜鸟警告---我不是真正的 C++ 程序员,只是发现自己需要用 Java 重新实现一些 C++ 代码。)
我试图从 OpenFST理解以下函数,作为在 JOpenFST 中启用读取 OpenFST 二进制文件的努力的一部分:
template <class T,
typename std::enable_if<std::is_class<T>::value, T>::type* = nullptr>
inline std::istream &ReadType(std::istream &strm, T *t) {
return t->Read(strm);
}
我无法确定此模板声明中的内容保证Read
on的存在t
。我意识到我的理解enable_if
和is_class
模糊,但我看不出有什么可以提供这样的方法。
也许它来自更广泛的背景?Read
为所有类类型声明 a 的东西???以下是该util.h
函数所在的导入:
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <set>
#include <sstream>
#include <string>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
#include <fst/compat.h>
#include <fst/types.h>
#include <fst/log.h>
#include <fstream>
#include <fst/flags.h>
#include <unordered_map>
感谢您对困惑的 Java 开发人员的耐心等待。
我无法确定此模板声明中的内容保证
Read
on的存在t
。
没有什么能保证存在。
也就是说:如果模板是用T
没有Read
成员函数的a 实例化的,那么编译器会抱怨调用了一个不存在的函数。
从另一个角度来看,除非T::Read
存在(并且可以使用给定参数调用),否则模板是格式错误的这一事实保证在模板的T
任何格式良好的实例化中都将具有这样的成员。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句