C++ 指向对象的指针函数的别名

C++ 指向对象的指针函数的别名,c++,C++,我用一个单独的地图类和一个单独的渲染器类来渲染地图 下面是它的简化版本:(我感兴趣的函数是renderMap() 但这是一个错误 错误C3867:'Map::accessData':非标准语法;使用“&”创建指向成员的指针 VisualStudio说“指向绑定函数的指针只能用于调用该函数。 所以我想,如果我们使用指针访问函数,那么创建函数指针是不可能的 如果我们将数据向量公开,那么我们可以访问它: std::vector<int>& dataPoint = pointerTo

我用一个单独的地图类和一个单独的渲染器类来渲染地图

下面是它的简化版本:(我感兴趣的函数是
renderMap()

但这是一个错误
错误C3867:'Map::accessData':非标准语法;使用“&”创建指向成员的指针
VisualStudio说“指向绑定函数的指针只能用于调用该函数。 所以我想,如果我们使用指针访问函数,那么创建函数指针是不可能的

如果我们将
数据
向量公开,那么我们可以访问它:

std::vector<int>& dataPoint = pointerToMap->data;
std::cout << dataPoint[0];

因此,问题是,在这种情况下是否可以缩短函数调用,以及如何缩短?

不要在每一行上调用
accessData
,只需创建一个引用并将其用于所有其他行:

const std::vector<int>& dataPoint = pointerToMap->accessData();

std::cout << dataPoint[0];
const std::vector&dataPoint=pointerToMap->accessData();

std::cout不要在每行调用
accessData
,只需创建一个引用并将其用于所有其他行:

const std::vector<int>& dataPoint = pointerToMap->accessData();

std::cout << dataPoint[0];
const std::vector&dataPoint=pointerToMap->accessData();

std::cout提示:如果成员函数不修改对象,请不要忘记将其标记为
const
const std::vector&accessData()const{…}
在函数名中公开细节有点多余。只需执行
setMap(Map*)
并获取一个指针。这让调用者非常清楚数据是如何使用的。从引用获取指针既狡猾又糟糕,因为调用者可能不知道他们现在有义务无限期地保持该对象的活动。更好的是,使用
std::shared\u ptr
来共享指针。@tadman原始指针非常适合这样做。
Map
的已知生存期比
渲染器的已知生存期长,因此使用共享指针是一种浪费,实际上会将已知生存期隐藏到运行时区域而不是编译时。原始指针在这里是正确的。@tadman是的,我通常使用第一个技巧,只是在本例中忘记了。第二个技巧非常好虽然,我不确定是通过引用还是指针传递它,但是这个技巧非常合理,所以我现在就使用它。谢谢:)技巧:如果成员函数不修改对象,不要忘记将其标记为
const
const std::vector&accessData()const{…}
在函数名中公开细节有点多余。只需执行
setMap(Map*)
并获取一个指针。这让调用者非常清楚数据是如何使用的。从引用获取指针既狡猾又糟糕,因为调用者可能不知道他们现在有义务无限期地保持该对象的活动。更好的是,使用
std::shared\u ptr
来共享指针。@tadman原始指针非常适合这样做。
Map
的已知生存期比
渲染器的已知生存期长,因此使用共享指针是一种浪费,实际上会将已知生存期隐藏到运行时区域而不是编译时。原始指针在这里是正确的。@tadman是的,我通常使用第一个技巧,只是在本例中忘记了。第二个技巧非常好哦,我不确定是通过引用还是指针传递它,但是这个技巧非常合理,所以我现在就使用它。谢谢:)谢谢!这正是我需要的:)谢谢!这正是我需要的:)
std::vector<int>& (Map:: * dataPoint)() = &Map::accessData;
std::cout << dataPoint;
const std::vector<int>& dataPoint = pointerToMap->accessData();

std::cout << dataPoint[0];