Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++ Lambda表达式作为类属性?_C++_C++11_Lambda - Fatal编程技术网

C++ Lambda表达式作为类属性?

C++ Lambda表达式作为类属性?,c++,c++11,lambda,C++,C++11,Lambda,是否可以将lambda表达式用作类属性? 我正在做C++中的一个小游戏,所有的机器人都有相同的更新程序,但是每个人都应该有自己的可选的额外更新例程。 我是这么想的 class Bot { private: Lambdatype lambda; public: Bot(Lambda l) {lambda = l;} update() { dosomething(); lambda(); } }; 例如,您可以使用假设它是void函数并获得两个int: class Bo

是否可以将lambda表达式用作类属性? 我正在做C++中的一个小游戏,所有的机器人都有相同的更新程序,但是每个人都应该有自己的可选的额外更新例程。 我是这么想的

class Bot
{
private:
    Lambdatype lambda;

public:
    Bot(Lambda l) {lambda = l;} 
    update() { dosomething(); lambda(); }
};
例如,您可以使用假设它是
void
函数并获得两个
int

class Bot
{
private:
    using Lambda = std::function<void(int, int) >;
    Lambda lambda;

public:

    Bot(const Lambda &l) : lambda(l)
    {
    }

    void update()
    {
        //dosomething...;
        lambda(1, 2);
    }
};

int main()
{
   Bot bot ([](int x, int y){ cout << x+y << endl; });

   bot.update();
}
类Bot
{
私人:
使用Lambda=std::function;
Lambda Lambda;
公众:
机器人(恒Lambda&l):Lambda(l)
{
}
无效更新()
{
//做某事。。。;
lambda(1,2);
}
};
int main()
{

Bot Bot([](intx,inty){cout此外,您可以使用make_Bot

template< class L >
struct bot
{
   bot( L l ) : lambda{l}  {}
   void update() {  lambda(1,2); }
private:
   L lambda;
};

template< class L > bot<L>  make_bot(L l ) { return {l}; }

int main()
{
   auto my_bot = make_bot( [](int x, int y){ std::cout << x + y << std::endl;} ) ;

   my_bot.update();
}
模板
结构机器人
{
bot(L):lambda{L}{}
void update(){lambda(1,2);}
私人:
L lambda;
};
模板bot make_bot(L){return{L};}
int main()
{

AutoMyBoox= MaMuxBoT([](int x,int y){sd::cOut-btw,它的拼写“lambda”):每个lambda表达式都有唯一的类型,所以我认为它是不可能的。考虑<代码> AutoX[= ][};Audiy=[]{};STD::IsAsIsA{{}//产生false 。@ StilesCrisis Ah,谢谢:在早期,我认为它的拼写应该是lambda。另外一个好处是:你不再局限于lambda,你可以存储任何具有正确签名的东西。这种技术的问题是每个机器人都有自己的lambda类型,因此也有自己的
bot
type。这意味着你不能再拥有机器人的集合。@MSalters.std::需要帮助的元组:)
template <typename L>
struct Bot
{
private:
   L lambda;

public:
   Bot(const L &l) : lambda{l}  {}
   void update() {  lambda(1,2); }
};

int main()
{
    auto l = [](int x, int y){ std::cout << x + y << std::endl; };

    Bot<decltype(l)> bot(l);

    bot.update();
}
template< class L >
struct bot
{
   bot( L l ) : lambda{l}  {}
   void update() {  lambda(1,2); }
private:
   L lambda;
};

template< class L > bot<L>  make_bot(L l ) { return {l}; }

int main()
{
   auto my_bot = make_bot( [](int x, int y){ std::cout << x + y << std::endl;} ) ;

   my_bot.update();
}