Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回常量值的函数对象_C++_Lambda_Anonymous Function - Fatal编程技术网

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另一方面,对于函数,它在默认情况下不是内联的。每个
仅由函数指针类型进行模板化,该类型不包含函数的代码。如果您硬编码要使用的函数,智能编译器可能仍然会将其内联,但它不太确定。不幸的是,我真的必须调用我的特定函数不幸的是,我真的必须调用我的特定函数。