2011-01-12 44 views
1

我有一個向量的boost :: any,並希望在此向量中找到'any'的索引。boost ::任何比較值?

事情是這樣的:

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; 
} 

的問題是,現在,當我做了選播只投給具體類型和不關心基類型:

class A {}; 
class B: public A {}; 
B v1; 
B v2; 
IsValueEqualTo<A*>(&v1, &v2); 

回答

1

我覺得你的問題是在boost::any庫中存在導致這些類型轉換失敗的根本性限制。更一般地說,如果您嘗試檢索相同類型的對象,則只能使用any_castboost::any恢復對象。例如,這不起作用:

class A { ... }; 
class B: public A { ... }; 

boost::any a = new B*; 
A* ptr = boost::any_cast<A*>(a); // Cast fails 

這是something that people have been complaining about for a while,我不知道一個解決方法。我認爲你可能想要做的一件事就是考慮爲什麼你首先將boost::any與多態性混合在一起。很可能你必須這樣做,但我沒有看到一個很好的方法來解決這個問題,而不會最大限度地減少你使用boost::any