C++ 使boost::function引用我的函数对象
我想将实现C++ 使boost::function引用我的函数对象,c++,boost,struct,boost-function,C++,Boost,Struct,Boost Function,我想将实现operator()的结构传递给接受boost::function的函数。此结构跟踪调用它的次数 struct CallCounter { CallCounter() : count( 0 ) {} void operator()() { // do stuff cout << "count is at " << count << endl; ++count; }
operator()
的结构传递给接受boost::function
的函数。此结构跟踪调用它的次数
struct CallCounter
{
CallCounter() : count( 0 ) {}
void operator()()
{
// do stuff
cout << "count is at " << count << endl;
++count;
}
int count;
};
即使调用
计数器
,它也会打印出正确的计数
。我知道boost::function
正在复制我的struct计数器
。有没有办法通过引用传递它,这样之后,count
就是正确的数字?我看到您使用的是boost::function
。这里实际上没有必要,您可以使用模板并通过引用传递函子:
template<typename Functor>
void callNTimes( int n, Functor& func )
{
for ( int i = 0; i < n; ++i )
func();
}
模板
void callNTimes(int n,Functor&func)
{
对于(int i=0;i
我看到您正在使用
boost::function
。这里实际上没有必要,您可以使用模板并通过引用传递函子:
template<typename Functor>
void callNTimes( int n, Functor& func )
{
for ( int i = 0; i < n; ++i )
func();
}
模板
void callNTimes(int n,Functor&func)
{
对于(int i=0;i
boost
函数
stuff默认采用变量值,与普通函数非常相似。如果希望函数使用对调用计数器的引用,则必须明确告诉它:
callNTimes( 20, boost::ref(counter) );
请看这里:
如果您想要一个常量引用,但是没有boost::rref
(这几乎与一个值相同,但是一次性使用。函数
是多用途的,因此没有移动)。此外,从C++11开始,所有这些都在std
名称空间中
此外,如果可能的话,Jefffrey的建议通常被认为是编写此类代码的更好方法。不过,它可能会对编译时间产生负面影响。boost函数
默认情况下采用变量值,与普通函数非常相似。如果希望函数使用对调用计数器的引用,则必须明确告诉它:
callNTimes( 20, boost::ref(counter) );
请看这里:
如果您想要一个常量引用,但是没有boost::rref
(这几乎与一个值相同,但是一次性使用。函数
是多用途的,因此没有移动)。此外,从C++11开始,所有这些都在std
名称空间中
此外,如果可能的话,Jefffrey的建议通常被认为是编写此类代码的更好方法。不过,这可能会对编译时间产生负面影响。我没有充分阅读该问题:(@MooingDuck,你应该将其作为答案发布。我更喜欢模板。;)我没有充分阅读该问题:(@MooingDuck,你应该将其作为答案发布。我更喜欢模板。)我想我推荐C++11中的函子&
,或者C++03中的常量函子&
/函子&
对;但是作为一个总体想法,我绝对支持这个建议。我想我会推荐C++11中的函子&
,或者C++03中的常量函子&
/函子&
对。在这种特殊情况下,在常量函子&
和函子&
之间,只有后者会起作用,而函子&
实际上变化不大;但总的来说,我绝对赞同这个建议。