Angus Leeming <[EMAIL PROTECTED]> writes:
| On Thu, 12 Oct 2000, Jean-Marc Lasgouttes wrote:
| > So, even when trying to ignore the vsnprntf problem, it seems I cannot
| > use the brand new compare_memfun thingie. Since the error message (or
| > rather the template definition) is chinese to me, I'd appreciate a fix.
| >
| > mycxx -DHAVE_CONFIG_H -I. -I../../lyx-devel/src -I. -I.. -I../../lyx-devel
| > -I../../lyx-devel/boost -I../../lyx-devel/src/cheaders
| > -I/afs/rocq/home/meval/common/include -I/usr/local/include -g0 -c
| > ../../lyx-devel/src/MenuBackend.C cxx: Error:
| > ../../lyx-devel/src/MenuBackend.C, line 404: no instance of function
| > template "compare_memfun" matches the argument list argument types are:
| > (const std::string &(Menu::*)() const, const std::string)
| > compare_memfun(&Menu::name, name)) != end();
| > -----------------------^
| >
| >
| > JMarc
|
| Looks like it's a const-thing. The foul hack below allows MenuBackend.C to
| compile.
| Angus
|
| class compare_memfun_t {
| public:
| compare_memfun_t(R(C::*p)(), A const & a)
| : pmf(p), arg(a) {}
| compare_memfun_t(R(C::*p)() const, A const & a)
| : pmfc(p), arg(a) {}
| bool operator()(C * c) {
| return (c->*pmf)() == arg;
| }
| bool operator()(C & c) {
| return (c.*pmf)() == arg;
| }
| bool operator()(C const * c) const {
| return (c->*pmfc)() == arg;
| }
| bool operator()(C const & c) const {
| return (c.*pmfc)() == arg;
| }
| private:
| R(C::*pmf)();
| R(C::*pmfc)() const;
| A const & arg;
| };
|
|
| template <class R, class C, class A>
| compare_memfun_t<R, C, A>
| compare_memfun(R(C::*p)() const, A const & a)
| {
| return compare_memfun_t<R, C, A>(p, a);
| }
|
|
| template <class R, class C, class A>
| compare_memfun_t<R, C, A>
| compare_memfun(R(C::*p)(), A const & a)
| {
| return compare_memfun_t<R, C, A>(p, a);
| }
Allmost the right fix, instead of adding const versions to
compare_memfun_t a const_compare_memfun_t should have been added.
Lgb