1

我想要一个将 X 作为模板参数的函数对象。有时它是一个对象(/引用),有时它是一个指向对象的指针。它很少是指向对象的指针。是否有一些模板魔术我可以根据需要多次获取 p / *p / **p 来获取对象本身?

4

1 回答 1

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 )

于 2013-07-01T23:05:44.517 回答