gpt4 book ai didi

c++ - 尝试避免某些特定 C++ 代码的代码重复

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

我有一些 C++ 代码,其中包含以下模式的重复:

int Func(Type1 arg1, Type2 arg2)
{
RAIILock lock(Singleton::Mutex());
Instance* ptr = GetClassInstance();
if (ptr) {
return ptr->Func(arg1, arg2);
} else {
return -1;
}
}

基本上,它试图在锁下获取一个有效的类实例指针,并实质上将调用从这个普通函数转发到具有相同签名的实例方法。 “Func”名称以及参数的数量和类型各不相同,但其余调用是相同的。

感觉应该有某种方法可以使用模板来实现这一点,而无需过多地使用模板魔法,但我一直无法想出任何办法。

最佳答案

类似的东西?

template <class MEM_FUN, class... ARGS>
auto call_func(MEM_FUN&& f, ARGS&&... args)
{
RAIILock lock(Singleton::Mutex());
Instance* ptr = GetClassInstance();
if (ptr) {
return (ptr->*f)(std::forward<ARGS>(args)...);
} else {
return -1;
}
}

这样调用:

call_func(&Instance::Func, arg1, arg2, arg3);

关于c++ - 尝试避免某些特定 C++ 代码的代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34726676/

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