我會在這裏使用「類型特徵」的概念。
這是一個編譯時解決方案(由於缺少某些類型特定的代碼而沒有運行時錯誤)的優點,並且它避免了爲每個傳入的類型編輯inputPort_varExp類的需要。
的想法是創建一個模板類/結構,以一個類型映射到另一個: -
template< typename t >
class DerivativeTrait
{
public:
typedef DerivativeType t;
//this provides a default derivate...
//you'd need to decide if that was a safe thing to do
};
然後,您可以專注該性狀類: -
template<>
class DerivativeTrait<Frame>
{
public:
typedef DerivativeType Twist;
};
您現在可以使用此在您的inputPort_varExp中定義a_type_der: -
typedef DerivativeTrait<a_type>::DerivativeType a_type_der;
注意自C++ 11以來您可以使用usi ng關鍵字而不是typedef。
其他一些選項:
如果你可以編輯你傳遞給inputPort_varExp的類型,你可以只添加一個typedef到這些類 - 這會不會對你的情況,因爲你在爲雙通工作一種。
另一個簡單的選擇是爲a_type_der添加額外的模板參數,但這並不妨礙錯誤的組合(例如Frame和double)。
如果類型可以由編譯器推導出來,您可能還需要考慮decltype。
來源
2016-04-27 12:08:56
ROX
http://www.drdobbs.com/cpp/c-type-traits/184404270 – ROX