当前位置:  开发笔记 > 编程语言 > 正文

根据模板参数将功能标记为noexcept

如何解决《根据模板参数将功能标记为noexcept》经验,为你挑选了1个好方法。

采取以下代码:

template 
void my_func() { T::some_method(); }

int main() {
    std::cout << (noexcept(my_func()) ? "noexcept" : "can throw") << std::endl;
    return 0;
}

my_func()即使SomeClass::some_method()标记为noexcept,这将始终打印出可能抛出的图像。(至少使用gcc 7.4.0和-std = c ++ 17)

有没有一种实用的方法可以使编译器noexcept根据模板参数检测函数是否存在?

我唯一想到的就是使用std :: enable_if:

template 
std::enable_if_t
my_func() noexcept { T::some_method(); }

template 
std::enable_if_t
my_func() { T::some_method(); }

但是,这会占用大量空间并导致代码重复。



1> StoryTeller ..:

noexcept 规格有一个采用布尔值的版本。

template 
void my_func() noexcept(noexcept(T::some_method())) { T::some_method(); }

现在,基于表达式它将有条件地例外T::some_method()

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有