这个 OpenFST 函数中的 Read 来自哪里?
Where does `Read` come from in this OpenFST function?
(新手警告---我不是真正的 C++ 程序员,只是发现自己需要在 Java 中重新实现一些 C++ 代码。)
我试图从 OpenFST 中理解 the following function 作为在 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
在 t
上的存在。我发现我对enable_if
和is_class
的理解很模糊,但是我看不出有什么可以提供这样的方法。
也许它来自更广泛的背景?为所有 class 类型声明 Read
的东西???以下是该函数所在的 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 开发者的耐心等待。
I can't determine what in this template declaration guarantees the existence of Read
on t
.
没有什么能保证存在。
即:如果模板被实例化为T
而没有Read
成员函数,那么编译器会报错调用了一个不存在的函数。
从另一个角度来看,除非 T::Read
存在(并且可以使用给定的参数调用),否则模板是错误格式的这一事实保证了 T
在模板的任何格式良好的实例化中都将具有这样的成员。
(新手警告---我不是真正的 C++ 程序员,只是发现自己需要在 Java 中重新实现一些 C++ 代码。)
我试图从 OpenFST 中理解 the following function 作为在 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
在 t
上的存在。我发现我对enable_if
和is_class
的理解很模糊,但是我看不出有什么可以提供这样的方法。
也许它来自更广泛的背景?为所有 class 类型声明 Read
的东西???以下是该函数所在的 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 开发者的耐心等待。
I can't determine what in this template declaration guarantees the existence of
Read
ont
.
没有什么能保证存在。
即:如果模板被实例化为T
而没有Read
成员函数,那么编译器会报错调用了一个不存在的函数。
从另一个角度来看,除非 T::Read
存在(并且可以使用给定的参数调用),否则模板是错误格式的这一事实保证了 T
在模板的任何格式良好的实例化中都将具有这样的成员。