例如
template<class D, Function>
struct A
{
void foo()
{
D d;
int i = Function(d);
// Here function can be a free function: int fun(D& d)
// or member function: int D::fun()
// or function object:
}
};
如何设置模板参数以便灵活选择不同类型的功能?代码可以改变只是允许灵活性很好。谢谢
答案 0 :(得分:1)
将函数传递给类可能更好。如果你没有传递一些对象,你有来例如defaut构造这样一个对象来调用:
template<class D, typename Function>
struct A
{
explicit A(Function f) : func_(f) { }
void foo()
{
D d;
int i = func_(d);
// Here function can be a free function: int fun(D& d)
// or member function: int D::fun()
// or function object:
}
Function func_;
};
由于可调用类型几乎总是无状态或内部状态很小,因此不应对复制这些类型产生任何影响。