gpt4 book ai didi

C++ 绑定(bind)成员函数与可变参数模板

转载 作者:搜寻专家 更新时间:2023-10-31 01:39:51 24 4
gpt4 key购买 nike

我下面的示例使用可变参数模板在类中注册一个函数。注册单个函数是可行的,但是类成员函数呢?我试过 std::bind 但这需要占位符,这不是一个选项,因为我不知道参数的数量。在 C++11 中是否有一种简单的方法可以做到这一点,或者我是否被迫为每个参数数量实现寄存器函数?

template<typename TReturn, typename... TArgs>
class Func {
std::function<TReturn (TArgs...)> fn;

template<typename TFunction, typename TObject>
bool register(TFunction f, TObject obj){

}

bool register(std::function<TReturn (TArgs...)> f){
fn = f;
return true;
}
}

最佳答案

创建具有所需签名的 lambda 函数,并从中构造 std::function 对象。

template<typename TReturn, typename... TArgs>
class Func {
std::function<TReturn (TArgs...)> fn;

template<typename TFunction, typename TObject>
bool Register(TFunction f, TObject obj){
fn = [obj](TArgs... args){return (obj.*f)(args...);};
return true;
}

bool Register(std::function<TReturn (TArgs...)> f){
fn = f;
return true;
}
}

(注意:Member function pointers 需要与相应的对象、对象引用或指向相应类的对象的指针一起使用。如果 TObject 是类值的,则成员函数调用语法将是 (obj.*f)。如果 TObject 是类似指针的,语法将是 (obj->*f)。)

关于C++ 绑定(bind)成员函数与可变参数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559376/

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