gpt4 book ai didi

c++ - 使用 is_same_v 自动类型推导

转载 作者:行者123 更新时间:2023-12-04 16:51:04 24 4
gpt4 key购买 nike

我在模板中有一些代码,如下所示:

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" );
}
autostat 只是为了让它暂时编译。 statsT 类型

在这个 if 语句之后,有一堆代码依赖于 stat ,所以显然我不能在 if 部分定义它。我想知道,我将如何在 if 之外定义它,因为它的类型取决于模板参数类型 T (但不是 T 本身)?

我是否必须指定一个额外的模板参数 U ,它接受 stat 的类型?或者必须使用某种继承?我宁愿避免这两种选择。

最佳答案

您可以将其包装在立即调用的 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();
}
}();

这也消除了对 ill-advised static_assert(false) 的需要,它现在被具有无效类型 statvoid 所取代。

关于c++ - 使用 is_same_v 自动类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59988055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com