Re: [OT] general C++ question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am Donnerstag, den 02.09.2010, 12:54 +0200 schrieb Michael Schwendt:
> On Thu, 02 Sep 2010 12:15:27 +0200, Christoph wrote:
> 
> > Hi all,
> > 
> > I just learned about closures in the Boost library and wanted to write
> > some shorter code. To test, I used the following snippet:
> > 
> > #include <iostream>
> > #include <string>
> > 
> > #include <boost/function.hpp>
> > #include <boost/bind.hpp>
> > 
> > class FakeVisitor {
> > public:
> >   virtual void visit(int e) {}
> >   virtual void visit(std::string e) = 0;
> > };
> > 
> > template <typename T> class GenericVisitor : public FakeVisitor {
> > public:
> >   boost::function<void (T e)> f;
> >   virtual void visit(T e) { f(e); }
> > };
> > 
> > void print(int a, int i) {
> >   std::cout << a << ":" << i << std::endl;
> > }
> > 
> > int main(int argc, char** argv) {
> >   GenericVisitor<int> v;
> >   v.f = boost::bind(&print, 0, _1);
> > 
> >   v.visit((int) 1);
> >   v.visit(std::string("hallo"));
> >   //boost::bind(print, 1, _1)(2);
> > }
> > 
> > Apparently, it does not work. Does anyone know why GenericVisitor<int>
> > does not inherit visit(std::string)?
> 
> It does, but it's still declared a pure virtual function, i.e.
> FakeVisitor (and GenericVisitor, too) is an abstract class that
> cannot be instantiated. You would need to declare an implementation
> of the visit(std::string) virtual method in GenericVisitor to make
> it a non-abstract type.

Ah, sorry, wrong snippet. It does not work with 

virtual void visit(std::string e) {}

in FakeVisitor.

The intention is to extend a visitor pattern with a templated class that
overloads exactly one method.

Attachment: signature.asc
Description: This is a digitally signed message part

-- 
users mailing list
users@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe or change subscription options:
https://admin.fedoraproject.org/mailman/listinfo/users
Guidelines: http://fedoraproject.org/wiki/Mailing_list_guidelines

[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux