作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
首先,我对函数指针及其可怕的语法非常陌生,所以玩得开心。
我正在编写一个方法来根据传入的函数过滤位图中的所有像素。我已经编写了取消引用它并在像素缓冲区中调用它的方法,但我的位图类中还需要一个包装器方法它接受函数指针并将其传递。我该怎么做?语法是什么?我有点难过。
这是我的代码删除了所有不相关的位并合并了文件(读取所有初始化填充的变量等)。
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/
我是一名优秀的程序员,十分优秀!