我在如何投射模板方面有点迷失.我有一个函数foo,它接受一个类型的参数ParamVector<double>*.我想传入一个ParamVector<float>*,我无法弄清楚如何为我的ParamVector课程重载强制转换操作符,谷歌并没有帮助我那么多.有没有人有如何做到这一点的例子?谢谢.
编辑:添加一些代码,抱歉,我是一个白痴,并没有很好地说出原始问题;
template<class T> class ParamVector
{
public:
vector <T> gnome;
vector <T> data_params;
}
template<class T> class ParamVectorConsumer
{
public:
ParamVector<T> test;
}
ParamVector<float> tester;
ParamVectorConsumer<double> cons;
cons.ParamVector = tester
Run Code Online (Sandbox Code Playgroud)
将无法编译.我想知道如何编写它以便我可以将float版本的测试器转换为ParamVector double.谢谢
EDIT2:施法是错误的.我不介意编写额外的代码,我只需要知道如何让编译器接受它,以便我可以编写某种转换代码.
我不确定,但也许你需要这样的东西:
template< typename TypeT >
struct ParamVector
{
template < typename NewTypeT >
operator ParamVector< NewTypeT >()
{
ParamVector< NewTypeT > result;
// do some converion things
return result;
}
template< typename NewTypeT >
ParamVector( const ParamVector< NewTypeT > &rhs )
{
// convert
}
template < typename NewTypeT >
ParamVector& operator=( const ParamVector< NewTypeT > &rhs )
{
// do some conversion thigns
return *this;
}
};
ParamVector< double > d1;
ParamVector< float > f1;
f1 = d1;
Run Code Online (Sandbox Code Playgroud)
您可以选择使用转换运算符或运算符= - 我在我的示例中提供了两者.