代码之家  ›  专栏  ›  技术社区  ›  apalomer

自定义类类似于基元类型

  •  0
  • apalomer  · 技术社区  · 6 年前

    我开发了一个模板库,用于我需要做的一些计算。现在,我需要将它与 Ceres automatic derivaties 工具。这样做的要求是所使用的函数和类需要被模板化,这样Ceres就可以使用它的 ceres::Jet<T,n> ceres::Jet<T,n>

    template <typename T>
    void func()
    {
      T a = 2;
    }
    

    我创建了一个模拟 cres::Jet<T,N> 一个(这个例子 struct ceres::Jet<T,N> ):

    template <typename T, int N>
    struct A
    {
      enum
      {
        DIMENSION = N
      };
    
      A()
      {
      }
    
      explicit A(const T& value)
      {
      }
    
      A(const T& value, int k)
      {
      }
    };
    

    func<A<double,2>>() (或任何 T N )我得到以下错误:

    error: no viable conversion from 'int' to 'A<double, 2>'
      T a = 2;
        ^   ~
    

    T a = 2 T a = T(2) 它会起作用的。但是,我不想在我的图书馆的每个地方都改变这一点(这需要很长时间),除非 T a=2 operator= 没有任何成功 甚至不编译):

    template <typename M>
    A(const M& a)
    {
    }
    
    template <typename M>
    A& operator=(const M& other)
    {
      return A<T, N>(T(other));
    }
    

    我也一直试图通过阅读来理解我的问题 implicit conversion user-defined conversions

    1. 有没有一种方法可以通过在类中添加一些定义来做到这一点?
    2. 有没有一种方法可以不用在类中添加定义就可以做到这一点?

    非常感谢你。

    0 回复  |  直到 6 年前