'Template of multiple abstract classes
There are many questions about template specialization with abstract classes, still I couldn't find something that helped me solve my problem.
First of all, let's say that we have three abstract classes: A
, B
and C
. Both B
and C
are derived from A
:
class A {
virtual void do_something();
};
class B : public A {
virtual void do_something_else();
};
class C : public A {
virtual void do_something_different();
};
Now, let's say that I have a templated class that should take as template parameters classes derived from A
. I can implement this constraint using C++11 std::is_base_of
. This class has a method execute
. What I want to accomplish is this: is the template parameter is also derived from B
, this method should have only one parameter, if it's derived from C
, the method should have two parameters.
How do I do that? Is it even possible?
Solution 1:[1]
C++20 way:
#include <concepts>
template<typename ty>
struct foo{
return_type bar() requires std::drived_from<ty,A>;
return_type bar(arg_type1) requires std::drived_from<ty,B>;
return_type bar(arg_type1,arg_type2) requires std::drived_from<ty,C>;
};
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |