Это выглядит так:
Код: Выделить всё
struct level1 {
int* ptr;
};
struct level2 {
int* ptr_0;
level1* ptr_1;
};
struct level3 {
int* ptr_0;
level1* ptr_1;
level2* ptr_2;
};
struct self_referential {
explicit constexpr self_referential(int base_value) :
a{base_value},
b{&a},
c{&a, &b},
d{&a, &b, &c} {}
int a;
level1 b;
level2 c;
level3 d;
};
constexpr auto eval_result() -> int {
auto const s = self_referential{9};
return *s.d.ptr_2->ptr_1->ptr;
}
auto main() -> int {
return eval_result();
}
Теперь проблема в том, что я хочу сделать self_referential шаблоном с переменным числом вариантов. Есть ли способ сделать эту структуру универсальной?
Сначала я попробовал использовать кортеж:
Код: Выделить всё
template
struct self_referential {
explicit constexpr self_referential(Base b) :
values{b, std::get(values)...} {}
std::tuple values;
};
Я пробовал использовать наследование, но опять без особого успеха:
Код: Выделить всё
template
struct self_referential : self_referential {
explicit constexpr self_referential(Base base) :
self_referential{&b}, b{base} {} // oh no
Base b;
};
Есть ли более простой способ сделать это? Может быть, это что-то противоположное тому, что я делал с наследством?
Подробнее здесь: https://stackoverflow.com/questions/797 ... c-template
Мобильная версия