我的意思是'中間'函數是:一個正常的函子,其中一個參數可以在調用時指定。問題是我有一個動畫時間線(基本上是特定幀的標量值),並且這個輸出需要通過管道傳入和傳出要設置動畫的對象中的getter/setter方法。以下是我試圖一個簡單的例子:C++試圖創建一個'Intermediate'函子
template < class ObjType, class Getter, class Setter, typename Scalar >
class Sy_propertyBridge : public Sy_abstractPropertyBridge
{
public:
Sy_propertyBridge(ObjType* object, Getter getter,
Setter setter)
: obj_(object), get_(getter),
set_(setter) {}
virtual ~Sy_propertyBridge() {}
inline virtual float get() const
{
// Cannot handle default arguments.
Scalar tmp = (obj_->*get_)();
return static_cast<float>(tmp);
}
inline virtual void set(float value)
{
Scalar tmp = static_cast<Scalar>(value);
(obj_->*set_)(tmp);
}
private:
ObjType* obj_;
Getter get_;
Setter set_;
};
的時間表僅持有浮動,因此無論標量類型的對象使用它的getter/setter方法,必須強制轉換(我有一個浮動的偏特那消除演員)。 ObjType
是動畫對象類型,Getter
和Setter
是指向方法的指針,而Scalar
是Getter和Setter類型並有望處理。
我認爲這樣可以,但編譯失敗,因爲一些getter/setter有其他的默認初始化參數。我不認爲這會是一個問題,因爲它們是默認的!但是當編譯器期望指向方法的指針比我提供的更多時,它失敗了。
然後我嘗試使用可變參數模板參數,以便默認值可以手動放入,但落在第一個障礙,因爲我不能將參數包存儲爲一個成員,作爲參數重複應用到指針-方法。我也一直在尋找std :: function和std :: bind,我希望能夠通過getter/setter方法的默認參數預設將std :: function存儲爲成員,並將相應的arg從調用之前的時間線。只有我找不到辦法...
有沒有人有任何建議來實現我的目標?或者,我的設計從根本上有缺陷,有一個更簡單的方法?
我一直在試圖找到一個藉口來使用lambda的!謝謝,我會放棄它,並讓你知道我如何繼續。 – cmannett85 2012-04-20 06:03:38
美妙地工作,一個奇妙的解決方案。 – cmannett85 2012-04-21 07:53:32