У меня есть набор неортогональных политик, все из которых реализуют общий именованный метод, политики добавляют проверки безопасности. Я хочу, чтобы пользователи могли комбинировать политики, чтобы обеспечить более сложную проверку без создания политик для каждого случая комбинации вручную. Мой подход создает новый класс политики для объединения других.
В упрощенном примере ниже показан C как класс объединения, здесь объединен метод id. Ожидаемый результат - при вызове идентификатора на C для последовательного вызова идентификатора каждого базового класса.
#include <iostream>
using namespace std;
struct A
{
void id() { cout << "A ";}
};
struct B
{
void id() { cout << "B ";}
};
template<class A, class... As>
struct C : public A, public As...
{
void id()
{
A::id();
As...::id(); // This line does not work, it is illustrative.
}
};
int main()
{
C<A, B> c;
c.id();
//expected: result A B
}
Вопрос: возможно ли расширить As... как-то сделать это без использования рекурсивного подхода, просто используя оператор...?