我最近发现在C++中有一个引用功能概念:).因此,存在指向函数的指针和指向成员函数的不同类型.问题出现了.是否有"参考成员功能"概念?
我尝试编译以下代码,但GCC 3.4.6给出了错误.
#include <iostream>
using namespace std;
class A {
public:
virtual void Af() const {
cout << "A::Af()" << endl;
}
};
int main() {
typedef void (A::& MemFnc)() const;
MemFnc mf = &A::Af;
A a;
(a.*mf)();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 为什么成员函数不能用作模板参数?例如,我想这样做:
struct Foo {
void Bar() { // do something
}
};
template <typename TOwner, void(&func)()>
void Call(TOwner *p) {
p->func();
}
int main() {
Foo a;
Call<Foo, Foo::Bar>(&a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道使用指向成员的指针可以做类似的事情; 好吧,它大部分时间都很酷,但我只是好奇为什么指针"应该"使用.
我认为上面解释"p-> func()"没有含糊之处.为什么该标准禁止我们使用成员函数作为模板参数?根据我的编译器(VC++ 2013),甚至不允许使用静态成员函数.有谁知道原因?或者,有没有办法做同样的事情而不会因指针解除引用而失去任何性能?
谢谢.
我最近才发现存在指向类数据成员的指针,例如:
class Car
{
public:
int speed;
};
int main()
{
int Car::*pSpeed = &Car::speed;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是否也存在对类数据成员的引用?如果是这样,声明它们的语法是什么?
为什么在获取成员函数的地址而不是全局函数时会出现&符号?即,为什么这样的事情
std::bind(&MyClass::MemberFunction, ...);
Run Code Online (Sandbox Code Playgroud)
当全球职能需要时
std::bind(GlobalFunction, ...);
Run Code Online (Sandbox Code Playgroud)
?