定义然后在其自己的模板类的构造函数中调用模板函数

时间:2015-12-18 07:37:41

标签: c++ templates

我试图在自己的模板类中使用模板函数。我们如何声明并调用此函数?这里是我认为正确代码的一个例子,故意没有为了说明目的而实现任何目的:

template<typename T> class TEMPLATE_CLASS
{
    // The template constructor
    TEMPLATE_CLASS(T value)
    { 
        // Here I call the class's template member function
        // ... but fails
        T variable = setVariable(value);
    }

    template<typename U>
    T setVariable(T value_to_set)
    {
        return value_to_set;
    }

}

2 个答案:

答案 0 :(得分:1)

在此特定示例中,当您将T传递给函数时,编译器无法确定U应该是什么。通常,模板类型用于其中一个参数,然后编译器可以从那里推断出类型。

可以使用setVariable<int>(value)表示U应该是int,但从小例子来看,很难说它是感。

答案 1 :(得分:0)

在您的代码中,没有必要将此方法设为模板方法,因为您不必在其范围内的任何位置使用U。但是如果你不这样做,你的代码应该是这样的:

template<typename T> class TEMPLATE_CLASS
{
    // The template constructor
    TEMPLATE_CLASS(T value)
    { 
        // Here I call the class's template member function
        // ... but fails
        T variable = setVariable(value);
    }

    template<typename U>
    U setVariable(U value_to_set)
    {
       return value_to_set;
    }
}

如果您不想使用value_to_set内部方法执行任何操作,请视情况而定,例如:转换为T,您可以从中返回T