Найти указатель выбранного объекта

Данный объект Foo у которого есть метод bool isChecked() const, Допустим, у меня есть Foo foos[],

Я гарантированно, что ровно один элемент foos вернусь true на isChecked()все остальные вернутся false,

Я ищу умный C ++ 03 способ найти индекс true элемент. Я могу сделать это, но это довольно уродливо. У кого-нибудь есть что-нибудь получше?

distance(foos, find_if(foos, foos + SIZE, mem_fun_ref(&Foo::isChecked)))

#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>

using namespace std;

#define SIZE 42

class Foo{
bool checked;
public:
Foo() : checked(false) {}
void setChecked() { checked = true; }
bool isChecked() const { return checked; }
};

int main() {
Foo foos[SIZE] = {};

foos[13].setChecked();

cout << distance(foos, find_if(foos, foos + SIZE, mem_fun_ref(&Foo::isChecked))) << endl;
}

Живой пример

1

Решение

К сожалению, мой ответ не является умным, и что более важно, может не соответствовать вашим вариантам использования. Но я бы создал класс (или структуру), который будет содержать ваш контейнер Foo и хранить индекс. Вы должны хранить дополнительный тип int (или любой другой тип, который вам нужен для индекса), но вам не нужно будет вычислять позицию действительного объекта.

Например, что-то подобное (или с любым типом контейнера, который соответствует вашим требованиям, или с шаблоном, если вы хотите использовать его не только для Foo ..):

class Foos {
private:
int _index = -1;
Foo _foos[MAXSIZE] = {};
public:
Foos(int size, int index)
{
....
}
int getIndex()
{
return _index;
}
};

//...
//   then just call getIndex() when needed
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]