2016-01-20 410 views
0
class A{ 
private: 
typedef std::function<void(A*)> Myfunction; 
Myfunction actionEvent; 
public: 
    A(){ 

actionEvent={std::cout<<"Hello"}; 
//declare a default function value here 

}; 
void executeAction(){ 
this->actionEvent(this); 
} 
} 

如何在构造函数中为myfunction分配默认值?指定默认值std :: function

+0

问题仍然是:如何从初始化'int'此不同或'std :: string'?你的问题很不清楚。 –

+0

@BaummitAugen,因为它不能以同样的方式完成。 –

+0

怎么样?我没有看到问题。 –

回答

2

您需要指定一些可以像匹配签名一样调用的函数。 {std::cout<<"Hello"}首先不是一个函数或可调用的,因此赋值没有意义。尝试是这样的:

int fun(int i) {return i;} 
std::function<int(int)> foo1 = fun; 

std::function<void(A*)> foo2 = [](A* a){a->something();} 

后者的语法被称为LAMBDA。

0

使用一个初始化列表,并用你想要的默认函数初始化你的std :: function。

class A; 
void my_func(A* a); 

class A{ 

    private: 

    std::function<void(A*)> myfunction; 

    public: 

    A(): myfunction(my_func) 
    {} 

}; 

void my_func(A* a) 
{ 
    //use a 

} 

或者,如果你想在用户指定的功能,或使用默认的非空,函数,这样做:

A(std::function<void(A*)> func = my_func): myfunction(my_func) 
{} 

在这种情况下,可以构造对象如

A foo;    
A bar(other_func); 
1

您可以定义下列方式默认参数和“执行”的成员函数构造:

class A { 
std::function<void(A*)> actionEvent; 
public: 
    A(std::function<void(A*)> actionEvent_ = {}) : actionEvent(actionEvent_) {} 
    void exec() { if(actionEvent) actionEvent(this); } 
}; 

Live Demo