这个 OpenFST 函数中的 `Read` 来自哪里?

乔什·汉森

(这里的菜鸟警告---我不是真正的 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);
}

我无法确定此模板声明中的内容保证Readon的存在t我意识到我的理解enable_ifis_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 开发人员的耐心等待。

埃罗里卡

我无法确定此模板声明中的内容保证Readon的存在t

没有什么能保证存在。

也就是说:如果模板是用T没有Read成员函数的a 实例化的,那么编译器会抱怨调用了一个不存在的函数。

从另一个角度来看,除非T::Read存在(并且可以使用给定参数调用),否则模板是格式错误的这一事实保证在模板的T任何格式良好的实例化中都将具有这样的成员。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章