【发布时间】:2018-01-04 04:14:50
【问题描述】:
struct Sample {
double value1;
double value2;
double value3;
};
double Mean(std::vector<Sample>::const_iterator begin,
std::vector<Sample>::const_iterator end,
double Sample::* var)
{
float mean = 0;
int samples = 0;
for(; begin != end; begin++) {
const Sample& s = *begin;
mean += s.*var;
samples++;
}
mean /= samples;
return mean;
}
...
double mean = Mean(samples.begin(), samples.end(), &Sample::value2);
来自C++: Pointer to class data member “::*” 的代码副本
我认为这是一个很好的例子来展示何时以及如何使用指向成员的指针,但是在深入研究之后,我发现var 的类型是double Sample::*。
所以我的问题是这个指针 (var) 如何知道它绑定到 value2 而不是 value1 或 value3 只是因为你传递了 &Sample::value2?
我的猜测:
我认为&Sample::value2 必须是特殊的,以指示指针var 应该指向地址偏移两个 double。但关键是如何表示?我没有在 clang AST 中找到任何其他信息。请帮我。谢谢。
【问题讨论】:
-
您是在询问一般的成员指针吗?还是 clang 的实现细节?
-
不清楚你在问什么。它“知道”,因为您将 value2 传递给参数。
-
@vu1p3n0x clang 实现细节
-
@NirFriedman 是的,我知道我这样传递 value2。但是在Mean函数中,它只能访问类型为double Sample::*的var,var怎么知道它绑定了value2。我想知道实现细节。
标签: c++ c++11 pointers clang c++14