所以,我试图做的是:
我想创建一个带有函数MyCLASS
的通用类genericFunction()
,默认情况下为空。现在,当一个同事想要使用这个泛型函数时,他所做的是创建一个MyClass
的实例,并覆盖genericFunction()
,所以它应该给出一个类似于此的resoult:
class MyClass{
public:
void genericFunction(){
//boring default actions
}
//constructor
MyClass(){
//do things
}
};
int main(){
MyClass instance();
//now we override the function, something like:
instance.genericFunction(){
cout << "This new code exists only for this instance, and has been created outside the class!";
}
instance.genericFunction();
return 0;
}
这基本上就是我想做的事情。
如果不可能,我怎样才能让我的类运行一个稍后在main()
中定义的函数?
非常感谢!
编辑:回答您的问题:
*我是c ++的新手,我的背景来自其他语言,这是真的
*想法如下:您正在创建具有位置的对象,如果位置在某个范围内,则执行genericFunction()
。问题是,对于每个实例,执行的函数可能(或实际上应该)是不同的。这个想法受到启发&#39;通过android的clickListener,其中每个元素在单击时都有不同的函数
再次感谢!
答案 0 :(得分:6)
如果您希望能够为类对象设置用户定义的函数,则可以为其指定类型为std::function的成员变量。使用与示例略有不同的语法,它可能如下所示:
class MyClass
{
public:
std::function<void()> genericFunction = []{};
};
int main()
{
MyClass instance;
instance.genericFunction(); // does nothing
// assign a lambda function to our
// function member
instance.genericFunction = []
{
std::cout
<< "This new code exists only for this instance, and has been created outside the class!";
};
instance.genericFunction(); // executes our lambda function
}
修改强>
如果您希望能够传递参数或接收返回值,请将模板签名更改为std::function
,如下所示:
class MyClass
{
public:
// take a string parameter and return an integer
std::function<int(std::string const&)> genericFunction = [](std::string const&){ return 0; };
};
int main()
{
MyClass instance;
int return_value;
return_value = instance.genericFunction("This will do nothing and return 0"); // does nothing
std::cout << "The first function returned: " << return_value << '\n';
// assign a lambda function to our
// function member
instance.genericFunction = [](std::string const& msg)
{
std::cout << msg << '\n';
return 5;
};
return_value = instance.genericFunction("This will pint a message and return 5"); // executes our lambda function
std::cout << "The second function returned: " << return_value << '\n';
}