C++ 返回常量值的函数对象
我想调用具有以下签名的函数:C++ 返回常量值的函数对象,c++,lambda,anonymous-function,C++,Lambda,Anonymous Function,我想调用具有以下签名的函数: void foreach(std::list<float>& floats, boost::function<float(float)> action); 假设我必须调用我的函数并且不能使用std::fill,那么C++03中最接近的替代方法是什么?有什么技巧可以避免实际声明常规函数吗?您可以使用 std::fill(floats.begin(), floats.end(), 3.14); 你可以用 std::fill(float
void foreach(std::list<float>& floats, boost::function<float(float)> action);
假设我必须调用我的函数并且不能使用std::fill
,那么C++03中最接近的替代方法是什么?有什么技巧可以避免实际声明常规函数吗?您可以使用
std::fill(floats.begin(), floats.end(), 3.14);
你可以用
std::fill(floats.begin(), floats.end(), 3.14);
C++03中最接近的替代方案是什么?有什么技巧可以避免实际声明正则函数吗
c++03中最接近的技巧是声明函数或函子类:
float DoThing1( float )
{
return 3.13;
}
struct DoThing2
{
float operator()(float)
{
return 3.13;
}
};
C++03中最接近的替代方案是什么?有什么技巧可以避免实际声明正则函数吗
c++03中最接近的技巧是声明函数或函子类:
float DoThing1( float )
{
return 3.13;
}
struct DoThing2
{
float operator()(float)
{
return 3.13;
}
};
查看Boost.Phoenix,它实现了。
如果你想的话,你可能需要弄清楚如何将它与Boost.Function一起使用 以下是Phoenix教程中的一个空函数示例:
template <typename F>
void print(F f)
{
cout << f() << endl;
}
int
main()
{
print(val(3));
print(val("Hello World"));
return 0;
}
模板
作废打印(F)
{
cout查看Boost.Phoenix,它实现了。
如果你想的话,你可能需要弄清楚如何将它与Boost.Function一起使用
以下是Phoenix教程中的一个空函数示例:
template <typename F>
void print(F f)
{
cout << f() << endl;
}
int
main()
{
print(val(3));
print(val("Hello World"));
return 0;
}
模板
作废打印(F)
{
为什么不干脆std::fill(floats.begin(),floats.end(),3.14)
?请看Boost.Phoenix,尤其是这个@dkrikun,看起来正是我需要的!你想把它作为答案发布,这样我就可以接受吗?@FireAphis发布为答案,thx为什么不干脆std::fill(floats.begin(),floats.end(),3.14)
?请看Boost.Phoenix,尤其是这个。@dkrikun,看起来正是我需要的!你想把它作为答案发布,这样我就可以接受它吗?@FireAphis发布为答案,thx在这种情况下,在函数上使用functor有什么区别吗?@Koushik唯一的区别是,对于functor,你必须创建一个对象。为了更好地编译r如果进行适当的优化,就不会有什么不同。是的,编译器会做得更好。还有一个临时的也可以做得更好?@Koushik我的意思是:如果进行适当的优化,函数和函子(临时的)都可以将导致相同的结果函子比函数指针更好。函子中的代码是在类的方法中编写的,这意味着它是隐式内联的
,编译器可能会将它内联到for_each
算法中,因为for_each
将由该函子的类型模板化。O另一方面,对于函数,它在默认情况下不是内联的。每个
的仅由函数指针类型模板化,该类型不包含函数的代码。如果您硬编码要使用的函数,智能编译器可能仍然会将其内联,但不太确定。使用functor ove会有什么区别吗r在这种情况下是函数?@Koushik唯一的区别是,对于一个函子,你必须创建一个对象。对于一个具有适当优化的好编译器来说,这是没有区别的。是的,编译器做得更好。还有一个临时的也可以做得更好?@Koushik我的意思是:有了适当的优化,函数和函子都可以(带临时附件)将导致相同的结果函子比函数指针更好。函子中的代码是在类的方法中编写的,这意味着它是隐式内联的
,编译器可能会将它内联到for_each
算法中,因为for_each
将由该函子的类型模板化。O另一方面,对于函数,它在默认情况下不是内联的。每个
的仅由函数指针类型进行模板化,该类型不包含函数的代码。如果您硬编码要使用的函数,智能编译器可能仍然会将其内联,但它不太确定。不幸的是,我真的必须调用我的特定函数不幸的是,我真的必须调用我的特定函数。