Is there a way to specify that a template parameter type must be derived from a particular base class?

Is there a way to specify that a template parameter type must be derived from a particular base class? This is how I wish it would work:

class  foo
{
    a_foo_function();
}
//.......
//.......
//.......
template  < class F : public foo >  // <<<=== my deceptively creative syntax
class bar
{
    F * pfd;
    bar(F* food){ pfd = food; }
    void f() const {  pfd->a_foo_function();  }  //guaranteed to work in my book
}
//.......
class foo                         just_a_plain_foo;
//.......
class foodish : public foo {}     a_foodish;
//.......
class foolish : public not_foo {} a_foolish;
//.......
typedef bar<foodish> barf;
barf b(a_foodish); //ok
barf c(a_foolish); //NOT ok
barf d(just_a_plain_foo); //NOT ok ... pdf pointer is to a derived

Ain't that beautiful? But my beautiful syntax won't compile, though; and I can't seem to find how to do this. Note that using the base class as template parameter won't work for me, as I may have distinct and mutually incompatible classes deriving from foo. TIA.



from Recent Questions - Stack Overflow https://ift.tt/2PGemsT
https://ift.tt/eA8V8J

Comments

Popular posts from this blog

Today Walkin 14th-Sept

Hibernate Search - Elasticsearch with JSON manipulation

Spring Elasticsearch Operations