如何将wxObject强制转换为wxVariant?

时间:2014-12-16 10:10:36

标签: c++ wxwidgets

我有一张wxObject的地图..但是我想将它强制转换为wxVariant。

void MWDataViewTable::InitColumnValues(wxString targetcolumn,wxString sourcecolumn , std::map<wxObject,wxObject> srctargetvalue)
{
    wxVariant srcvalue;
    wxVariant tgtvalue;
    int srccolumnpos = GetColumnPosition(sourcecolumn);
    int tgtcolumnpos = GetColumnPosition(targetcolumn);
    int rows = m_rowdataList.size()-1;  //without header
    for(int i=0;i< rows;i++)
    {       
        GetValue(srcvalue,i,srccolumnpos);
        tgtvalue = (wxVariant)srctargetvalue[srcvalue] ;// typecasting
        SetValue(tgtvalue,i,tgtcolumnpos/*toggle-column*/);
    }

}

在突出显示的行中我正在进行类型转换..但是这给了我一个错误,上面写着&#34;错误1错误C2678:二进制&#39;&lt;&#39; :找不到哪个运算符采用类型&#39; const wxObject&#39;&#34; 此错误发生在 xstddef.h 文件中。 我不知道为什么会发生这种情况,或者我错误地进行了类型转换。 请帮助..!

1 个答案:

答案 0 :(得分:1)

std::mapkey values are generally used to sort and uniquely identify the elements

在您的代码中,密钥和值均为wxObject类型。 wxObject类似乎没有重载一个小于操作符的方法(我不知道这些wx对象是什么)。

std::map需要less operator方法来执行对键值进行排序所需的比较。 所以你应该将自己的比较函数传递给比较两个wxObjects的std :: map。

模板容器std :: map将compare函数作为第三个文件。

template < class Key,                                     // map::key_type
           class T,                                       // map::mapped_type
           class Compare = less<Key>,                     // map::key_compare
           class Alloc = allocator<pair<const Key,T> >    // map::allocator_type
           > class map; 

Compare是一个二元谓词,在你的情况下会有以下定义:

bool MyCompare( const wxObject& , const wxObject&)
{
  \\Compare logic that returns true or false
}

您可以拥有自己的地图,使用此比较方法:

typedef std::map<wxObject,wxObject,&MyCompare> MyMap;
MyMap srctargetvalue;