我有一个模板函数,其成员函数指针作为模板参数
template<
class Object,
class Property,
void (Object::*setProperty)(Property const&)
>
void f(Object& object, Property const& property)
每次,我都必须使用3个模板参数调用该函数,如下所示
f<A, Value, &A::setValue>(a, value);
通过使用tempalte参数派生或其他技术来减少模板参数数量的方法
f<&A::setValue>(a, value)
答案 0 :(得分:4)
我的第一个想法是“不”,但后来我意识到有一种奇怪的方式:
template<class Object, class Property>
struct APointlessName { //needs a better name, but I can't think of one right away
APointlessName(Object& object, Property const& property)
:object(&object), property(&property)
{}
template<void (Object::*setProperty)(Property const&)>
void with()
{
Object& object = *(this->object);
Property const& property= *(this->property);
//your function code goes here
}
Object* object;
Property const* property;
};
template< class Object, class Property>
APointlessName<Object,Property> f(Object& object, Property const& property)
{return APointlessName<Object,Property>(object, property);}
然后用法就是这样:
f(a, value).with<&A::setValue>();
绝对有点奇怪,但确实避免了显式类型。希望其他人想到更好的方式。