我正在尝试创建一个类,该类在初始化时将函数作为参数。理想情况下,该功能应该已经存在。我知道在Python中,我可以这样做:
class TestClass:
def __init__(self, function_parameter):
self.fp = function_parameter
def executeFP(self):
self.fp()
def testFunction():
print("test")
q = TestClass(testFunction)
q.executeFP()
如何在C ++中做到这一点? (如果有问题,我正在使用Arduino)
答案 0 :(得分:1)
Arduino没有querySkuDetailsAsync()
,因为AVR GCC并未随标准库一起提供,因此注释中的建议不适用于该特定平台。
如果您需要Arduino或其他嵌入式平台类似的行为,则可以使用ETL的std::function
或etl::function
,或创建自己的实现。 etl::delegate
使用堆分配进行类型擦除,对于嵌入式而言,这通常不是一个好选择。
最简单的实现将使用C样式的函数指针:
std::function
Live example,其中包含一些用例。
当然,您也可以在这种情况下使用C指针,但是可以将此类扩展为其他类型。如果您需要更复杂的行为,例如函子,成员函数和捕获lambda,请参阅我在上面引用的ETL实现。
答案 1 :(得分:0)
您可以执行以下操作: (不确定Arduino是否可以像一样)
template <typename F>
class TestClass {
public:
TestClass( F func )
:m_func(func)
{
}
void executeFP()
{
m_func();
}
private:
F *m_func;
};
void doStuff()
{
std::cout << "test" << std::endl;
}
bool doAnotherStuff( )
{
std::cout <<"test " << 40 +2 << std::endl;
return true;
}
int main()
{
TestClass<decltype(doStuff)> someObj ( doStuff );
TestClass<decltype(doAnotherStuff)> someObj2 ( doAnotherStuff );
someObj.executeFP();
someObj2.executeFP();
}
请参见here