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

发布于 2024-10-21 17:26:09 字数 463 浏览 1 评论 0原文

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

template <typename E>
class VecExpression{

public:

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

could someone please explain to me this code? I've never seen this kind of operator overloading. What is its return type? Does it have any parameters? Can I see a usage or maybe where it's getting called in the source?

Source: http://en.wikipedia.org/wiki/Expression_templates

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情深已缘浅 2024-10-28 17:26:09

VecExpression 是一个模板,因此运算符返回对该类的模板类型 E 的常量或非常量引用。它是一个隐式转换运算符。它不接受任何参数,仅使用 VecExpression 并允许在需要 E 的上下文中使用它。

VecExpression is a template so the operators are returning a const or non-const reference to the template type E of the class. It's an implicit conversion operator. It takes no parameters, just takes a use of VecExpression<E> and allows its use in a context where it needs an E.

等风来 2024-10-28 17:26:09

这是转换运算符。

int i = (int)a;

这将调用::operator int()

This is the conversion operator.

int i = (int)a;

that would invoke a::operator int()

梦萦几度 2024-10-28 17:26:09

您可以将其视为强制转换运算符。

它将 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).
}

You can think of it as the cast operator.

It is defining the cast VecExpression to an object of type E (or a reference to object of type E). Basically this allows you to pass an object of type VecExpression to any function that takes an object of type E and the compiler will auto convert using this operator.

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

int code()
{
    VecExpression<int>  x;
    return stuff(x); // cast x to E (which is an int).
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文