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