c++模板编程中的Or语句
Or statement in C++ template programming
我有一个大致像这样的程序。
#include <iostream>
#include <type_traits>
class Output
{
public:
template <typename T>
Output& operator&(T const& t)
{
std::cout << t << std::endl;
return *this;
}
};
class Input
{
public:
template <typename T>
Input& operator&(T& t)
{
std::cin >> t;
return *this;
}
};
class C
{
public:
int num1, num2;
};
template <typename T>
typename std::enable_if<std::is_same<T, Input>::value>::type operator&(T& t, C& c)
{
t & c.num1 & c.num2;
}
template <typename T>
typename std::enable_if<std::is_same<T, Output>::value>::type operator&(T& t, C& c)
{
t & c.num1 & c.num2;
}
int main()
{
Output o;
Input i;
C c;
i & c;
o & c;
return 0;
}
它工作得很好,但我理想地想结合功能typename std::enable_if<std::is_same<T, Input>::value>::type operator&(T& t, C& c)
和typename std::enable_if<std::is_same<T, Output>::value>::type operator&(T& t, C& c)
。所以我在寻找类似typename std::enable_if<std::is_same<T, Input>::value || std::is_same<T, Output>::value>>::type operator&(T& t, C& c)
的东西。c++模板提供这样的"或"语句吗?
答案真的很简单-使用||
-正是你在你的问题。enable_if
的第一个参数是bool
,因此可以使用产生编译时布尔值的任何表达式组合。
template <typename T>
typename std::enable_if<
std::is_same<T, Input>::value ||
std::is_same<T, Output>::value
>::type operator&(T& t, C& c)
{
t & c.num1 & c.num2;
}
现场演示
相关文章:
- 我如何将 OR 与 if 语句一起使用字符串
- 将 if 语句中的字符与 or 进行比较
- C++ 虽然语句不适用于字符串和"or"
- 在 if 语句中处理多个 or 的更优雅的方法是什么
- C++ if 语句将条件设置为 true 和循环中的 OR-ing 条件之间的行为差异
- 如何生成 OR like 语句编译时?C++
- OR 语句执行所有评估
- 将 OR 放入 if 语句会导致 ISO C++禁止指针和整数之间的比较(f 允许)
- 如何在 else-if 语句中正确使用 or 语句 (||)
- 带有 or 表达式的 If 语句中的语法错误
- 涉及while循环和OR语句的新手C++问题
- While 循环中的C++ "or"语句混淆了事情
- C++开关语句不允许我使用多个"or"?什么?
- if语句检查每个OR操作符
- if语句在有两个OR选项的第三个条件下不起作用
- 在or条件语句中是否存在强制对两个表达式求值的模式或技巧?
- IF语句中的多个OR或AND条件
- c++模板编程中的Or语句
- 为什么我不能使用 ||OR C++ Switch 语句中的运算符?
- c++中的Or语句