我对如何转换模板有些迷茫。我有一个函数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 =-我在示例中同时提供了这两种方法。

10-08 13:31