added cast<ValueType> function to Value
parent
4a3dc51f85
commit
c2cdd21a7a
|
@ -187,4 +187,11 @@ private:
|
||||||
struct PoolTag { };
|
struct PoolTag { };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// define Value::cast here since now GenericValue has been declared
|
||||||
|
template<typename ValueType>
|
||||||
|
const ValueType& Value::cast() const {
|
||||||
|
return dynamic_cast<const GenericValue<ValueType>&>(*this).value();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} /* namespace gtsam */
|
} /* namespace gtsam */
|
||||||
|
|
|
@ -122,6 +122,10 @@ namespace gtsam {
|
||||||
/** Assignment operator */
|
/** Assignment operator */
|
||||||
virtual Value& operator=(const Value& rhs) = 0;
|
virtual Value& operator=(const Value& rhs) = 0;
|
||||||
|
|
||||||
|
/** Cast to known ValueType */
|
||||||
|
template<typename ValueType>
|
||||||
|
const ValueType& cast() const;
|
||||||
|
|
||||||
/** Virutal destructor */
|
/** Virutal destructor */
|
||||||
virtual ~Value() {}
|
virtual ~Value() {}
|
||||||
|
|
||||||
|
|
|
@ -353,12 +353,12 @@ TEST(Values, filter) {
|
||||||
BOOST_FOREACH(const Values::Filtered<>::KeyValuePair& key_value, filtered) {
|
BOOST_FOREACH(const Values::Filtered<>::KeyValuePair& key_value, filtered) {
|
||||||
if(i == 0) {
|
if(i == 0) {
|
||||||
LONGS_EQUAL(2, (long)key_value.key);
|
LONGS_EQUAL(2, (long)key_value.key);
|
||||||
EXPECT(typeid(GenericValue<Pose2>) == typeid(key_value.value));
|
try {key_value.value.cast<Pose2>();} catch (const std::bad_cast& e) { FAIL("can't cast Value to Pose2");}
|
||||||
EXPECT(assert_equal(pose2, dynamic_cast<const GenericValue<Pose2>&>(key_value.value).value()));
|
EXPECT(assert_equal(pose2, key_value.value.cast<Pose2>()));
|
||||||
} else if(i == 1) {
|
} else if(i == 1) {
|
||||||
LONGS_EQUAL(3, (long)key_value.key);
|
LONGS_EQUAL(3, (long)key_value.key);
|
||||||
EXPECT(typeid(GenericValue<Pose3>) == typeid(key_value.value));
|
try {key_value.value.cast<Pose3>();} catch (const std::bad_cast& e) { FAIL("can't cast Value to Pose3");}
|
||||||
EXPECT(assert_equal(pose3, dynamic_cast<const GenericValue<Pose3>&>(key_value.value).value()));
|
EXPECT(assert_equal(pose3, key_value.value.cast<Pose3>()));
|
||||||
} else {
|
} else {
|
||||||
EXPECT(false);
|
EXPECT(false);
|
||||||
}
|
}
|
||||||
|
@ -416,10 +416,10 @@ TEST(Values, Symbol_filter) {
|
||||||
BOOST_FOREACH(const Values::Filtered<Value>::KeyValuePair& key_value, values.filter(Symbol::ChrTest('y'))) {
|
BOOST_FOREACH(const Values::Filtered<Value>::KeyValuePair& key_value, values.filter(Symbol::ChrTest('y'))) {
|
||||||
if(i == 0) {
|
if(i == 0) {
|
||||||
LONGS_EQUAL(Symbol('y', 1), (long)key_value.key);
|
LONGS_EQUAL(Symbol('y', 1), (long)key_value.key);
|
||||||
EXPECT(assert_equal(pose1, dynamic_cast<const GenericValue<Pose3>&>(key_value.value).value()));
|
EXPECT(assert_equal(pose1, key_value.value.cast<Pose3>()));
|
||||||
} else if(i == 1) {
|
} else if(i == 1) {
|
||||||
LONGS_EQUAL(Symbol('y', 3), (long)key_value.key);
|
LONGS_EQUAL(Symbol('y', 3), (long)key_value.key);
|
||||||
EXPECT(assert_equal(pose3, dynamic_cast<const GenericValue<Pose3>&>(key_value.value).value()));
|
EXPECT(assert_equal(pose3, key_value.value.cast<Pose3>()));
|
||||||
} else {
|
} else {
|
||||||
EXPECT(false);
|
EXPECT(false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue