【发布时间】:2020-04-06 14:14:22
【问题描述】:
我有这段代码专门针对两种类型的打印功能,并恢复到任何其他类型的基本版本。
我的问题是,有没有办法在基本打印函数的 enable_if 中为所有专用版本输入否定大小写的情况下编写此代码?
即有没有办法删除所有!std::is_same 并且仍然具有明确的打印功能?
欢迎使用任何版本的 C++,但适用于 c++14 的版本会有所帮助。
#include <iostream>
template<typename T, std::enable_if_t<!std::is_same<T, int>::value && !std::is_same<T, double>::value, int> = 42>
void print(T data)
{
std::cout << "base:" << data << std::endl;
}
template<typename T, std::enable_if_t<std::is_same<T, double>::value, int> = 42>
void print(T data)
{
std::cout << "double:" << data << std::endl;
}
template<typename T, std::enable_if_t<std::is_same<T, int>::value, int> = 42>
void print(T data)
{
std::cout << "int:" << data << std::endl;
}
int main()
{
std::string foo("foo");
double bar = 1.2;
int baz = 5;
print(foo);
print(bar);
print(baz);
}
【问题讨论】:
-
C++17
if constexpr将是更具可读性的 IMO,但 C++17。如果您有适合您的条件的概念,可能是 C++20 概念,但同样不是 C++14。