gpt4 book ai didi

c++ - 模板化成员函数指针作为模板参数

转载 作者:行者123 更新时间:2023-11-30 04:21:50 25 4
gpt4 key购买 nike

我希望接受模板化成员函数作为模板参数。

例如,给定这个类:

class A
{
public:
template<typename... Args>
void Foo(Args...) {}

void Bar() {}
};

我希望能够调用:

Invoke<&A::Foo>(5, true);

这类似于调用:

A a;
a.Foo(5, true);

我知道如何为 Bar() 做这个:

template<void (A::*F)()>
void Invoke()
{
A a;
(a.*F)();
}

int main()
{
Invoke<&A::Bar>();
}

是否可以将其扩展为模板化成员函数指针?或者类似地,编写这样的转发函数,可以处理具有任何参数类型的函数。这不起作用,但类似于:

template<typename... Args, void (A::*F)(Args...)>
void Invoke(Args... args)
{
A a;
(a.*F)(args...);
}

我明白为什么这不可能,但如果这是真的,您能指出原因的标准吗?我也在努力了解有关标准细节的更多信息。

最佳答案

Is it possible to extend this to a templated member function pointer?

没有。尽管如果您只需要 Foo 的特定实例化你可以使用 Invoke<&A::Foo<int, bool>> .

Or similarly, to write a forwarding function like this that can handle a function with any parameter types.

为了能够使用不同的签名,您必须修改 Invoke对任何类型的可调用 对象进行操作。然后,您必须定义一个调用实际函数的可调用对象:

struct callable_foo
{
explicit callable_foo( A& obj ) : _obj( obj ){}

template< typename ...Args >
void operator ()( Args&&... args )
{
_obj.Foo( std::forward< Args >( args )... );
}

A& _obj;
}

关于c++ - 模板化成员函数指针作为模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com