Это «указатель на член» - следующий код иллюстрирует его использование:
#include <iostream>
using namespace std;
class Car
{
public:
int speed;
};
int main()
{
int Car::*pSpeed = &Car::speed;
Car c1;
c1.speed = 1; // direct access
cout << "speed is " << c1.speed << endl;
c1.*pSpeed = 2; // access via pointer to member
cout << "speed is " << c1.speed << endl;
return 0;
}
Что касается , почему вы хотели бы сделать это, то это даст вам другое уровень косвенности, который может решить некоторые сложные проблемы. Но, честно говоря, мне никогда не приходилось использовать их в моем собственном коде.
Изменить: я не могу придумать убедительное использование указателей для данных члена. Указатель на функции-члены можно использовать в подключаемых архитектурах, но повторное создание примера в небольшом пространстве поражает меня. Следующей является моя лучшая (непроверенная) попытка - применить функцию, которая будет выполнять предварительную обработку после того, как применить выбранную пользователем функцию-член к объекту:
void Apply( SomeClass * c, void (SomeClass::*func)() ) {
// do hefty pre-call processing
(c->*func)(); // call user specified function
// do hefty post-call processing
}
Скобки вокруг c->*func
необходимы, поскольку оператор ->*
имеет более низкий приоритет, чем оператор вызова функции.
Мне удалось преодолеть эту проблему, используя «max-age = 0» в моем заголовке Cache-Control, например:
var url = "http://www.stackoverflow.com";
var options =
{
// Ensure we get a fresh copy of the site every time.
headers : {'Cache-Control' : 'max-age=0'}
};
var response = UrlFetchApp.fetch(url, options)
Похоже, что в Google App Engine есть проблема . Кто-то открыл вопрос , однако он, кажется, был закрыт.