在 if-else 块中实现类似 SFINAE 的效果
Achieving an SFINAE-like effect in an if-else block
我希望能够写出类似的东西
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
的抱怨。如何在不诉诸 2 个foo()
定义的情况下达到预期的效果?
您可以根据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>{});
}
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- 使用if-else将数字转换为单词
- 为什么这个案例陈述需要一个"if else"而不仅仅是一个"if"?
- C++ If/Else 语句被跳过
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 如何将 if else 语句重写为 switch 语句
- 在 C++ 中的 if-else if- else 语句期间更改变量
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 具有嵌套 if-else 的循环的时间复杂度
- 为什么无论输入如何,所有 if-else 语句都会打印?
- 简化对两个布尔值的 4 个 if/else 检查
- 如何在C++中创建 if else 循环而不是多个嵌套?
- 为什么切换 if else 语句的顺序会导致错误?
- 如何使用 if else 语句
- if/else 语句输出由于加号或减号而未显示正确的消息
- 如何解释 #if/#else 位域?(VC++菜鸟)
- 在 if-else 块中实现类似 SFINAE 的效果