특정 클래스 유형의 벡터가 있습니다. 벡터가 Song 클래스 내에 있지 않은 것을더 높은 순서의 함수가 배열에 적용됩니다.
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;
};
참고. 다른 클래스에 있습니다. 그 다른 반에서 나는 고차원에서 기능을 창조했다. 나는이 같은 전화를 걸 때, 그러나
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 메소드를 호출합니다.
나는 당신의 질문을 완전히 이해하고 있는지 확신 할 수 없다. 그러나 나는 [std :: function'] (http://en.cppreference.com/w/cpp/utility/functional/function)이 당신이 원하는 것을 . –
''Song :: get'에서'this'를 사용할 수 있다는 것을 의미합니까? –
''데이터베이스 [a]''송 '이 아닌가? 왜 그냥'database [a] .getLength()'하지 않는 것일까 요? – Pradhan