bool composeTemplateProperty(const PropertyBag& bag, T& result) { TypeInfoRepository::shared_ptr tir = Types(); if ( tir->type( bag.getType()) == tir->getTypeInfo< T >() ) { Property< typename T::value_type>* comp; int dimension = bag.size(); result.resize( dimension ); // Get values int size_correction = 0; for (int i = 0; i < dimension ; i++) { base::PropertyBase* element = bag.getItem( i ); comp = dynamic_cast< Property< typename T::value_type>* >( element ); if ( comp == 0 ) { // detect LEGACY element: if ( element->getName() == "Size" ) { // oops, our result vector will be one smaller. size_correction += 1; continue; } Logger::log() << Logger::Error << "Aborting composition of Property< T > " << ": Exptected data element "<< i << " to be of type " << internal::DataSourceTypeInfo< typename T::value_type>::getTypeName() <<" got type " << element->getType() <<Logger::endl; return false; } result[ i - size_correction ] = comp->get(); } result.resize( dimension - size_correction ); } else { Logger::log() << Logger::Error << "Composing Property< T > :" << " type mismatch, got type '"<< bag.getType() << "', expected 'vector<" << internal::DataSourceTypeInfo< typename T::value_type>::getTypeName() <<">'."<<Logger::endl; return false; } return true; }