使用关键字声明外部局部变量?

时间:2015-05-10 11:54:20

标签: c++ inheritance operator-overloading external keyword

我想理解为什么C ++不能提供一个关键字来声明调用函数本地的被调用函数中的变量。 实际上,我需要继承一个vector类,我必须定义通常的操作:

template <unsigned int N>
class Vector
{
public:
    Vector(const std::array<float, N>& coords);

    Vector<N>& operator*=(float k);
    // others...
protected:
    std::array<float, N> m_coords;
};

class Vector3 : public Vector<3>
{
public:
    Vector3(float x = 0.f, float y = 0.f, float z = 0.f);

    // some specific operations like cross product
}

template <unsigned int N>
Vector<N> operator*(float k, const Vector<N>& a)
{
    Vector<N> res(a);
    res *= k;
    return res;
}

如果我返回对新对象的引用

,这样的函数将适用于每个继承的向量
template <unsigned int N>
Vector<N>& operator*(float k, const Vector<N>& a)
{
    Vector<N>* res = a.getClone();// virtual method returning a new object
    *res *= k;
    return &res;
}

但是,我不想在调用函数中删除res,所以我想在调用函数中创建一个本地变量。

可能?

1 个答案:

答案 0 :(得分:0)

抱歉,我忘记了外部功能的模板方法:

template <class T>
T operator*(float k, const T& a)
{
    T res(a);
    res *= k;
    return res;
}

因此,我可以操纵我的隐藏Vector&lt; 3&gt; Vector3的方法。

但我没有回答关键字问题。