gpt4 book ai didi

c++ - 专门用于日志记录的 Functor

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

我一直潜伏在这里,试图弄清楚 Functor 是否可以做我需要它做的事情。

我想做的是包装对类方法的调用,并以某种方式捕获函数返回的值。鉴于我的 Functor 类,我需要做些什么才能将我的评论转化为代码:

template < typename Func >
class MySpecializedFunctor
{
Func t;
MyObject& p;
public:

MyFunctor( MyObject &obj, Func f )
{
p = obj;
t = f;
}

void runFunc( ... )
{
// Can I use an ellipsis '...' to pass values into t->xxxx() ???

// Assume the first param is always time, the others are never the same
bool b = p->t( time( NULL ), /* first value of ... */, /* second value of ... */ );
if ( !b )
{
// log error here
}
}
}

因为这是一个 Functor,被包装的函数可以有 n 个参数。

这可能吗?

编辑:我不能使用 C++0X。

最佳答案

使用可变模板:

template <typename... Args>
void runFunc(Args&&... args)
{
bool b = p->t(time(NULL), std::forward<Args>(args)...);
if ( !b )
{
// log error here
}
}

或者重载runFunc,如果你的编译器不支持可变参数模板或完美转发:

// this one support 3 const arguments, you will need to overload
// all variations of arguments count and constness
template <typename Arg1, typename Arg2, typename Arg3>
void runFunc(const Arg1& arg1, const Arg2& arg2, const Arg3& arg3)
{
bool b = p->t(time(NULL), arg1, arg2, arg3);
if ( !b )
{
// log error here
}
}

关于c++ - 专门用于日志记录的 Functor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11728379/

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