应用于数组的更高阶的函数

时间:2014-12-27 09:29:05

标签: c++ class higher-order-functions member-function-pointers

我有一个特定类类型的向量;

vector<Song> database;

class Song
{
public:
    string getName() const;
    string getSinger() const;
    unsigned int getLength();
    unsigned short getYear() const;

private:
    char singer[51];
    char name[51];
    unsigned int length;
    unsigned short year;
};

请注意,矢量不在Song类中。它在另一堂课。在另一个类中,我从更高的顺序创建了一个函数。该函数的一个参数是Song类的getter:

void order(string, int, Song*, unsigned int (Song::*get)(), bool(*compare)(unsigned int, unsigned int));

然而,当我这样打电话时:

database[a].(obj->*get())

我理解当我必须处理来自其他类的函数时,我必须提供对该类的对象的引用,并且也提供该类的函数的引用。我的问题是我是否可以传递一个自动检测我正在使用的对象的函数引用?

修改

void Interface::order(string command, int findLength,
    Song* obj, unsigned int (Song::*get)(), bool(*compare)(unsigned int first, unsigned int second))
{
    for (unsigned int a = 0; a < database.size(); a++)
    {
        if (compare(database[a].(obj->*get)(), stoi(command)))
        {
            cout << "Deleting found match...\n";
            database.erase(database.begin() + a);
        }
    }
}

我在database[a].(obj->*get)()收到错误 错误在于编译器期望成员名称。但是,我想提供一个不依赖于我已经传递的对象的函数。换句话说,我问是否有一种结构类型允许我在这里传递一个函数作为参数,该函数将自动调用每个对象[来自歌曲的矢量]及其各自的getter方法。

1 个答案:

答案 0 :(得分:1)

通过成员函数指针访问成员函数的->*语法是对的:当你有一个指向对象的指针时,这就是语法。

通过成员对象访问成员函数还有另一种语法:

(database[a].*get)()

这将在get Song上的database[a]对象上调用{{1}}指向的成员函数。