我的意思是'中间'函数是:一个正常的函子,其中一个参数可以在调用时指定。问题是我有一个动画时间线(基本上是特定帧的标量值),并且这个输出需要通过管道传入和传出要设置动画的对象中的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