每个实例C 的覆盖功能
overriding function for each instance c++
所以,我要做的是:我想创建一个具有函数genericFunction()
的通用类MyCLASS
,该函数默认情况下是空的。现在,当同事想使用此通用函数时,他所做的就是创建MyClass
的实例,并覆盖genericFunction()
,因此它应该给出与此相似的重新估计:
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()
。问题是对于每个实例,执行的函数可能(或实际上应该)不同。这个想法是由Android的ClickListener"启发"的,每个元素在单击
再次感谢!
如果要设置类对象的用户定义的函数,则可以给它一个类型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';
}
相关文章:
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 矢量被push_back功能覆盖
- 为什么我无法覆盖虚拟功能?
- 是否可以在 C++03 中实现类似"覆盖"的功能
- 覆盖私有功能,它与受保护功能有何不同?
- 带有抽象类的覆盖模板功能
- 覆盖私人功能
- C++继承 - 覆盖功能,包括使用 "::" s、.h 文件和.cpp文件
- C++向下转换以撤消功能覆盖
- 每个实例C 的覆盖功能
- SVML的覆盖功能调用
- 如何在标题文件中获取成员功能的正确代码覆盖范围
- C 从同一基本模板类覆盖功能,具有多个继承模棱两可的函数调用
- 是否有可能覆盖全局实现的功能
- 覆盖功能的异常规范比基本版本更宽松
- 与基类不同的返回类型的C 覆盖功能
- C++中的覆盖功能
- C++覆盖功能
- 构建和使用包含覆盖功能的pnacl-compiler-rt
- 纯虚拟和覆盖功能(c++)