我在模板中有一些代码,如下所示:
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" );
}
Run Code Online (Sandbox Code Playgroud)
在auto
为stat
只是为了得到它暂时编译。stats
是类型T
在这个 if 语句之后,有一堆代码依赖于stat
,所以显然我不能在if
部分中定义它。我想知道,我将如何在 之外定义它if
,因为它的类型取决于模板参数类型T
(但不是它T
本身)?
我是否必须指定一个额外的模板参数U
,它接受类型为stat
?或者必须使用某种继承?我宁愿避免这两种选择。
Sto*_*ica 10
您可以将其包装在立即调用的 lambda 表达式中
auto stat = [&] {
if constexpr ( std::is_same_v<T, CompletedGeneration> ) {
return stats->getGenerationStats();
} else if constexpr ( std::is_same_v<T, CompletedReset> ) {
return stats->getResetStats();
} else if constexpr ( std::is_same_v<T, CompletedRun> ) {
return stats->getRunStats();
}
}();
Run Code Online (Sandbox Code Playgroud)
这也省去了不明智的 static_assert(false)
,现在被替换stat
为无效类型void
。
归档时间: |
|
查看次数: |
115 次 |
最近记录: |