C ++表达模板:运算符是什么?

时间:2011-03-12 01:06:55

标签: c++ templates

template <typename E>
class VecExpression{

public:

  operator E&(){
    return static_cast<E&>(*this);
  }
  operator E const&() const{
    return static_cast<const E&>(*this);
  }
};

有人可以向我解释一下这段代码吗?我从未见过这种运算符重载。它的返回类型是什么?它有任何参数吗?我能看到一个用法,或者可能会在源代码中调用它吗?

来源:http://en.wikipedia.org/wiki/Expression_templates

3 个答案:

答案 0 :(得分:5)

VecExpression是一个模板,因此运算符返回对类的模板类型E的const或非const引用。它是一个隐式转换运算符。它不需要参数,只需使用VecExpression<E>并允许在需要E的上下文中使用它。

答案 1 :(得分:3)

这是转化运营商。

int i = (int)a;

将调用:: operator int()

答案 2 :(得分:3)

您可以将其视为演员。

它将强制转换VecExpression定义为E类型的对象(或对E类型对象的引用)。基本上,这允许您将VecExpression类型的对象传递给任何带有E类对象的函数,编译器将使用此运算符自动转换。

int stuff(int x)
{
    return x + 1;
}

int code()
{
    VecExpression<int>  x;
    return stuff(x); // cast x to E (which is an int).
}