gpt4 book ai didi

c++ - 如何在 C++ 中重新传递函数指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:18 25 4
gpt4 key购买 nike

首先,我对函数指针及其可怕的语法非常陌生,所以玩得开心。

我正在编写一个方法来根据传入的函数过滤位图中的所有像素。我已经编写了取消引用它并在像素缓冲区中调用它的方法,但我的位图类中还需要一个包装器方法它接受函数指针并将其传递。我该怎么做?语法是什么?我有点难过。

这是我的代码删除了所有不相关的位并合并了文件(读取所有初始化填充的变量等)。

struct sColour
{
unsigned char r, g, b, a;
};

class cPixelBuffer
{
private:
sColour* _pixels;
int _width;
int _height;
int _buffersize;
public:
void FilterAll(sColour (*FilterFunc)(sColour));
};


void cPixelBuffer::FilterAll(sColour (*FilterFunc)(sColour))
{
// fast fast fast hacky FAST
for (int i = 0; i < _buffersize; i++)
{
_pixels[i] = (*FilterFunc)(_pixels[i]);
}
}

class cBitmap
{
private:
cPixelBuffer* _pixels;
public:
inline void cBitmap::Filter(sColour (*FilterFunc)(sColour))
{
//HERE!!
}
};

最佳答案

如果我明白你想要什么:

inline void cBitmap::Filter(sColour (*FilterFunc)(sColour))
{
_pixels->FilterAll( FilterFunc);
}

如果您对函数指针类型使用 typedef,通常处理函数指针可以变得更容易阅读(实际上您的函数指针本身并不算太糟糕 - 它们很容易变得更糟):

struct sColour
{
unsigned char r, g, b, a;
};

typedef
sColour (*FilterFunc_t)(sColour); // typedef for a FilterFunc

class cPixelBuffer
{
private:
sColour* _pixels;
int _width;
int _height;
int _buffersize;
public:
void FilterAll(FilterFunc_t FilterFunc);
};


void cPixelBuffer::FilterAll(FilterFunc_t FilterFunc)
{
// fast fast fast hacky FAST
for (int i = 0; i < _buffersize; i++)
{
_pixels[i] = (*FilterFunc)(_pixels[i]);
}
}

class cBitmap
{
private:
cPixelBuffer* _pixels;
public:
inline void cBitmap::Filter(FilterFunc_t FilterFunc)
{
_pixels->FilterAll( FilterFunc);
}
};

关于c++ - 如何在 C++ 中重新传递函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2589197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com