gpt4 book ai didi

c++ - 在 if-else block 中实现类似 SFINAE 的效果

转载 作者:太空宇宙 更新时间:2023-11-03 10:26:00 24 4
gpt4 key购买 nike

我希望能够写出类似的东西

template <typename T> void foo() {
// ...
if (is_nice<T>::value) {
bar_which_is_defined_only_for_nice_types<T>();
}
}

但是,当我尝试编译它时(g++ 4.9.3,无优化),我收到了关于 bar_which_is_defined_only_for_nice_types 的投诉。如何在不求助于 foo() 的 2 个定义的情况下达到预期的效果?

最佳答案

您可以根据 is_nice<T> 标记调度

#include <type_traits>

template<typename T>
struct is_nice : std::false_type {};
template<>
struct is_nice<int> : std::true_type {};

template<typename T>
void do_nice_things(std::true_type)
{
bar_which_is_defined_only_for_nice_types<T>();
}

template<typename T>
void do_nice_things(std::false_type)
{
}

template <typename T>
void foo()
{
do_nice_things<T>(is_nice<T>{});
}

关于c++ - 在 if-else block 中实现类似 SFINAE 的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166611/

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