【Hacker News搬运】C++左箭头运算符(2016)
-
Title: C++ left arrow operator (2016)
C++左箭头运算符(2016)
Text:
Url: https://www.atnnn.com/p/operator-larrow/
标题:AtnNn.com - C++ 左箭头操作符 发布日期:未提供 作者:未提供 顶部图片链接:无 文本内容: 有时你有一个指向类的指针,并且你想调用一个方法。在这种情况下,你可以使用 -> 操作符。 那么,当你有一个指向方法的指针,并且想在类上调用它时,你应该怎么做呢?使用 <- 操作符! #include <iostream> template<class T> struct larrow { larrow(T* a_) : a(a_) { } T* a; }; template <class T, class R> R operator<(R (T::* f)(), larrow<T> it) { return (it.a->*f)(); } template<class T> larrow<T> operator-(T& a) { return larrow<T>(&a); } struct C { void f() { std::cout << "foo\n"; } }; int main() { C x; (&C::f)<-x; } 总结: 该页面讨论了C++中的一个特殊操作符 <-,它用于指针到成员函数的调用。这个操作符允许开发者通过一个指向类的指针和一个指向成员函数的指针来调用成员函数。这可以通过一个示例来说明,该示例定义了一个结构体 larrow,它封装了一个指向类的指针,并提供了 <- 操作符的实现。示例中的 main 函数展示了如何使用 <- 操作符来调用成员函数。
Post by: layer8
Comments:
WalterBright: The C++ pointer-to-member is a fairly confusing concept. What it actually is is a pair - a pointer to the instance of the struct, and a pointer to a function in that struct.<p>D calls these <i>delegates</i>, and generalizes it to being a pair consisting of a "context pointer" and a "pointer to a function". The neato thing is these do not have to be struct or class member functions. They can be nested functions, where the the "context pointer" is a pointer to the stack frame of the caller. I.e., a pointer to the closure.<p>Hence, these become lambdas.<p>Lamdas and pointers-to-nested functions are completely interchangeable with pointers to members. The caller does not know the difference.<p>In fact, lambdas are far, far more commonly used in D than pointers-to-members.
WalterBright: 指向成员的C++指针是一个相当令人困惑的概念。它实际上是一对——一个指向结构实例的指针,一个指向该结构中函数的指针<p> D将这些<i>委托称为</i>,并将其推广为由一个“i”组成的对;上下文指针”;以及一个“;指向函数的指针”;。最重要的是,这些函数不一定是结构或类成员函数。它们可以是嵌套函数;上下文指针”;是指向调用方堆栈帧的指针。也就是说,指向闭包的指针<p> 因此,这些就变成了lambdas<p> Lamdas和指向嵌套函数的指针与指向成员的指针完全可以互换。打电话的人不知道其中的区别<p> 事实上,lambda在D中比指向成员的指针更常用。
psyclobe: C++ is a never ending series of complexities that lead to incredible use cases
psyclobe: C++是一系列永无止境的复杂性,导致了令人难以置信的用例
a1o: Love code made for kicks. Also the other articles on the blog are super different one from the other!
a1o: 专为踢腿而设的爱情密码。此外,博客上的其他文章也是超级不同的一个和另一个!
spacechild1: This is pretty evil
spacechild1: 这很邪恶:-D
Sharlin: See also the long right arrow, or "goes to" operator --> (<a href="https://stackoverflow.com/questions/1642028/what-is-the-operator-in-c-c" rel="nofollow">https://stackoverflow.com/questions/1642028/what-is-the-oper...</a>)
Sharlin: 还参见右长箭头;转到“”;运算符-->;(<a href=“https://;/;stackoverflow.com/:问题/!1642028/,what-is-the-operator-in-cc”rel=“nofollow”>https://;#xx2F;斯塔克沃夫流.com/;问题�ȏ;操作是什么…</a>)