如何在C ++中将函数用作类的初始化程序

时间:2019-08-19 03:30:34

标签: c++ function class arduino arduino-c++

我正在尝试创建一个类,该类在初始化时将函数作为参数。理想情况下,该功能应该已经存在。我知道在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)

2 个答案:

答案 0 :(得分:1)

Arduino没有querySkuDetailsAsync(),因为AVR GCC并未随标准库一起提供,因此注释中的建议不适用于该特定平台。

如果您需要Arduino或其他嵌入式平台类似的行为,则可以使用ETLstd::functionetl::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