3

我想通过将成员函数作为模板参数传递来调用它,而不使用 boost 是可能的。这是我尝试做的一个例子,

class object { void method(); }

{
object object_instance;
...
apply<object:: method>();
...

template<class F>
void apply() { F(object_instance); } // want to call object_instance.F()
}

这不起作用,所以问题是我如何将对象方法绑定到对象。谢谢

上面是一个例子,不是真正的代码。我有一堆函数,只是名称不同,但有很多参数,我想在运算符中包含它们。

4

4 回答 4

5

就像是:

struct foo
{
    void bar(void) {}
};

template <typename R, typename C>
R apply(C& pObject, R (C::*pFunc)())
{
    return (pObject.*pFunc)();
}

int main(void)
{
    foo f;
    apply(f, &foo::bar);
}

这。

于 2010-02-01T00:36:03.167 回答
1

这类似于您的代码,并且允许将成员函数作为模板参数传递:

class object { public: void method() {} };
object object_instance;

template<void (object::*F)()>
void apply() {
    (object_instance.*F)();
}

int main() {
    apply<&object::method>();
    return 0;
}
于 2010-02-01T00:42:02.527 回答
0

由于成员函数不是类型或整数值,因此您不能将其作为模板参数传递。你可以通过创建一个调用成员函数的结构来做你想做的事情,尽管在模板的范围内有 object_instance 是相当臭的。

你到底想做什么?

于 2010-02-01T00:27:21.667 回答
0

此示例适用于 c++ox 中的右值引用。不适用于所有编译器。

class Sample
{
public:
    void fun() { cout << "Sample::fun\n"; }
};

template<typename Function>
void FunCall( Function&& f)
{
    f();
}

void RvaluesDemo()
{
    FunCall([&]
    {
        Sample().fun();
    });
}
于 2010-02-01T00:37:41.053 回答