У меня есть вектор boost :: any, и я хотел бы найти индекс 'any' в этом векторе.
Примерно так:
vector<any> values;
any valueISearch = ...;
find<A*>(valueISearch);
Для этого япопробуйте сравнить 2 любых значения следующим методом:
template <class T> bool IsValueEqualTo(any aniInVector, any value)
{
if (aniInVector.empty() && value.empty())
return true;
if (aniInVector.empty() && !value.empty())
return false;
if (!aniInVector.empty() && value.empty())
return false;
try
{
T left = boost::any_cast<T>(aniInVector);
T right = boost::any_cast<T>(value);
return left == right;
}
catch(const boost::bad_any_cast &exception)
{
}
return false;
}
Проблема в том, что теперь, когда я делаю anycast, он приводит только к определенному типу и не заботится об основных типах:
class A {};
class B: public A {};
B v1;
B v2;
IsValueEqualTo<A*>(&v1, &v2);