У меня есть некоторый код в шаблоне, подобный так:
if constexpr ( std::is_same_v<T, CompletedGeneration> ) {
auto stat = stats->getGenerationStats();
} else if constexpr ( std::is_same_v<T, CompletedReset> ) {
auto stat = stats->getResetStats();
} else if constexpr ( std::is_same_v<T, CompletedRun> ) {
auto stat = stats->getRunStats();
} else {
static_assert( false, "Invalid type for helper function" );
}
auto
для stat
был только для того, чтобы заставить его временно скомпилироваться. stats
имеет тип T
После этого оператора if есть набор кода, который опирается на stat
, поэтому, очевидно, я не могу определить его в части if
. Мне интересно, как бы я go определил его вне if
, поскольку его тип зависит от типа параметра шаблона T
(но не сам T
)?
Нужно ли указывать дополнительный параметр шаблона U
, который принимает тип для stat
? Или нужно использовать какое-то наследство? Обе эти опции я бы предпочел избежать.