Blame view

tools/openfst-1.6.7/include/fst/script/arg-packs.h 1.03 KB
8dcb6dfcb   Yannick Estève   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  // See www.openfst.org for extensive documentation on this weighted
  // finite-state transducer library.
  //
  // std::pair and std::tuple are used for the arguments of FstClass operations.
  //
  // If a function with a return value is required, use the WithReturnValue
  // template as follows:
  //
  // WithReturnValue<bool, std::tuple<...>>
  
  #ifndef FST_SCRIPT_ARG_PACKS_H_
  #define FST_SCRIPT_ARG_PACKS_H_
  
  #include <type_traits>
  
  namespace fst {
  namespace script {
  
  // Tack this on to an existing type to add a return value. The syntax for
  // accessing the args is then slightly more stilted, as you must do an extra
  // member access (since the args are stored as a member of this class).
  
  template <class Retval, class ArgTuple>
  struct WithReturnValue {
    // Avoid reference-to-reference if ArgTuple is a reference.
    using Args = typename std::remove_reference<ArgTuple>::type;
  
    Retval retval;
    const Args &args;
  
    explicit WithReturnValue(const Args &args) : args(args) {}
  };
  
  }  // namespace script
  }  // namespace fst
  
  #endif  // FST_SCRIPT_ARG_PACKS_H_