gpt4 book ai didi

c++ - C++模板编程中的Or语句

转载 作者:行者123 更新时间:2023-11-30 00:50:42 24 4
gpt4 key购买 nike

我有一个大致如下结构的程序。

#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,因此您可以使用产生编译时 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;
}

Live demo

关于c++ - C++模板编程中的Or语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24197643/

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