Add support for field of std::pair<T, U>

This commit is contained in:
Magne Sjaastad
2023-03-31 10:21:56 +02:00
committed by GitHub
parent c40b400346
commit ee1b363ae0
11 changed files with 484 additions and 6 deletions

View File

@@ -134,6 +134,47 @@ public:
}
};
//==================================================================================================
/// Partial specialization for std::pair
//==================================================================================================
template <typename T, typename U>
class PdmValueFieldSpecialization<std::pair<T, U>>
{
public:
static QVariant convert( const std::pair<T, U>& value )
{
QList<QVariant> returnList;
returnList.push_back( PdmValueFieldSpecialization<T>::convert( value.first ) );
returnList.push_back( PdmValueFieldSpecialization<U>::convert( value.second ) );
return returnList;
}
static void setFromVariant( const QVariant& variantValue, std::pair<T, U>& value )
{
if ( variantValue.canConvert<QList<QVariant>>() )
{
QList<QVariant> lst = variantValue.toList();
if ( lst.size() == 2 )
{
T first;
PdmValueFieldSpecialization<T>::setFromVariant( lst[0], first );
U second;
PdmValueFieldSpecialization<U>::setFromVariant( lst[1], second );
value = std::make_pair( first, second );
}
}
}
static bool isEqual( const QVariant& variantValue, const QVariant& variantValue2 )
{
return variantValue == variantValue2;
}
};
//==================================================================================================
/// Partial specialization for caf::FilePath
//==================================================================================================