通过引用或指针或迭代器处理对象的仿函数

时间:2013-07-01 22:55:18

标签: c++

我想要一个以X为模板参数的函数对象。有时它是一个对象(/ reference),有时候它是指向对象的指针。它很少是指向对象指针的指针。是否有一些模板魔法可以做到只需要获得p / * p / ** p多次来获取对象本身?

1 个答案:

答案 0 :(得分:4)

如果它只是指针层,那么简单的模板重载将起到作用。你甚至可以将它封装在CRTP mixin中(尽管这需要一些元编程,所以我不会在这里演示)。

struct drill_ftor {
     foo operator() ( bar & x ) {}

     template< typename t >
     foo operator() ( t * x ) { return (*this)( * x ); }
};

模板化参数t *匹配bar *bar **bar ****或其他任何内容。它也匹配int *,但这只会导致错误,因为没有重载匹配operator() ( int )