0

我正在尝试使用 ODB,但我遇到了关于 std::atomic 的错误。我读过这个:odb 邮件列表上的相同问题 所以我试图在文件 wrapper-traits.hxx 中为 std::atomic 定义 odb::wrapper_traits 特化。我通过添加来做到这一点:

   // Specialization for odb::atomic.
  template <typename T>
  class wrapper_traits< std::atomic<T> >
  {
  public:
    // T can be const.
    //
    typedef T wrapped_type;
    typedef nullable<T> wrapper_type;

    // T can be const.
    //
    typedef
    typename odb::details::meta::remove_const<T>::result
    unrestricted_wrapped_type;

    static const bool null_handler = true;
    static const bool null_default = true;

    static bool
    get_null (const wrapper_type& n)
    {
      return n.null ();
    }

    static void
    set_null (wrapper_type& n)
    {
      n.reset ();
    }

    static const wrapped_type&
    get_ref (const wrapper_type& n)
    {
      return *n;
    }

    static unrestricted_wrapped_type&
    set_ref (wrapper_type& n)
    {
      if (n.null ())
        n = unrestricted_wrapped_type ();

      return const_cast<unrestricted_wrapped_type&> (*n);
    }
  };

但是当我尝试获取我的 shema 时仍然出现错误(使用 :odb -d -v mysql --generate-query --generate-schema *.h ):

/usr/local/include/odb/wrapper-traits.hxx:277:30: 错误: '<b>atomic' 不是 '<b>std' 的成员

有人可以帮我吗?泽维尔。

4

1 回答 1

0

最后,我正在使用其他方式:我正在使用虚拟数据成员

    #pragma db transient
    std::atomic<double> valAtom;
#pragma db member(valAtom_) virtual(double) \
    get(this.valAtom.load (std::memory_order_relaxed)) \
    set(this.valAtom.store ((?), std::memory_order_relaxed))

而且(感谢 jignatius )我的 odb 命令中有 --std c++11 。没关系!

于 2020-08-11T13:23:00.423 回答