【发布时间】:2016-03-04 09:13:57
【问题描述】:
我想避免有两个参数。所以我们有:
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?您希望将其作为模板参数传递吗? -
并且
foo(a, a.boo)不应该编译。你的意思是foo(a, &A::boo)? -
C++ 有时很麻烦:你总是需要对象和成员函数指针!
标签: c++ function templates object lambda