Я пишу программу симуляции физики и хочу сделать следующее: у меня есть адаптированная структура hana, и я хочу проверить, есть ли у этой структуры член с именем "bedbedEnergy "во время компиляции, используя:
if constexpr ( ... )
Каков правильный способ сделать это в c ++ 17, который я использую?
Теперь, используя документацию по хане, я придумал это:
struct HasAE { double absorbedEnergy };
struct HasNoAE {};
temaplate<typename Cell>
void irelevantFunction(Cell& cell){
auto has_absorbedEnergy = hana::is_valid(
[](auto &&p) -> decltype((void) p.absorbedEnergy) {});
if constexpr(has_absorbedEnergy(cell)) { ... }
}
HasAE cell;
HasNoAE anotherCell;
cell.absorbedEnergy = 42; //value known at runtime
irelevantFunction(cell);
irelevantFunction(anotherCell);
Дело в том, что этопрекрасно компилируется с g ++ 7.4.0 и делает то, что я ожидаю, но не компилируется с clang ++ - 8.Выдает ошибку:
constexpr, если условие не является константным выражением
Я подозреваю, что это происходит из-за того, что аргумент has_absorbedEnergy - ячейка не является и константным выражением,Есть ли способ обойти это?