我想避免有两个参数。因此,我们有:C++ :: Template函数 - 从object.function获取对象的地址
class A;
void A::boo();
我希望把这个代码:
template <class C>
void foo(C &c, void (C::*func)())
{
(c.*func)();
}
A a;
foo(a, &a.boo);
要这样:
template <class C, C &c> // Something similar
void foo(void (C::*func)())
{
(c.*func)();
}
A a;
foo(&a.boo); // Since I'm using the reference of the object instance
我相信我的理解是,在C++模板是简单的字符串替换,但我观察它们的实现稍微先进和灵活。我也相信我掌握了阶级及其成员职能的概念;函数的内存中有一个地址,类实例就像函数的参数,以访问该类实例的内存成员。
所以,让这一切成为现实,是否有办法做我想做的事情?
编辑:
我不好,错过了&迹象。更正:& a.boo
C++模板无处不接近简单的字符串替换。在你的例子中'foo'应该从哪里得到'c'?你期望通过它作为模板参数吗? – TartanLlama
而'foo(a,a.boo)'不应该编译。你是不是指'foo(a,&A :: boo)'? – TartanLlama
C++有时很麻烦:你总是需要对象和成员函数指针! –