我对如何转换模板有些迷茫。我有一个函数foo,它带有ParamVector<double>*
类型的参数。我想传递一个ParamVector<float>*
,但我不知道如何为ParamVector
类重载强制转换运算符,而Google并没有提供太多帮助。有没有人有一个如何做到这一点的例子?谢谢。
编辑:添加一些代码,对不起,我是个白痴,根本没有说出原始问题。
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
将无法编译。我想知道如何编写它,以便可以将测试器的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;
您可以选择使用转换运算符,也可以选择operator =-我在示例中同时提供了这两种方法。