我开发了一个模板库,用于我需要做的一些计算。现在,我需要将它与
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
-
有没有一种方法可以通过在类中添加一些定义来做到这一点?
-
有没有一种方法可以不用在类中添加定义就可以做到这一点?
非常感谢你。