自定义类分配给基本类型

时间:2018-09-13 00:30:54

标签: c++ templates

我已经为需要执行的某些计算开发了模板库。现在,我需要将其与Ceres结合使用,并且希望能够使用automatic derivaties工具。对此的要求是所使用的函数和类需要进行模板化,以便Ceres可以使用其ceres::Jet<T,n>类型。我已经能够开发功能,并使用它们和ceres解决最小化问题。但是,我的库(由大量的函数和类组成)具有一些功能,例如(请注意,这是一个简化的示例,其产生的错误与我在我的库中使用ceres::Jet<T,n>的错误相同):

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

我创建了一个模仿cres::Jet<T,N>的小结构(此示例structceres::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>>()(或任何TN)时,都会出现以下错误:

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

我知道我可以将T a = 2更改为T a = T(2),并且可以使用。但是,除非T a = 2是我不应该做的非常愚蠢的事情,否则我不想在库中的每个位置上都进行更改(这会花费很长时间)。我尝试添加构造函数或operator=都没有成功(operator=甚至没有编译):

template <typename M>
A(const M& a)
{
}

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

我还试图通过阅读implicit conversionuser-defined conversions来理解我的问题,但是我不理解如何在示例中使用该信息。

我的问题是:

  1. 是否可以通过在类中添加一些定义来做到这一点?
  2. 有没有一种方法可以在不添加类定义的情况下做到这一点?

非常感谢您。

0 个答案:

没有答案