问题是什么:
我正在尝试实现一个具有两种专业化的类,一种用于整数类型,一种用于所有其他类型。我想到的第一个版本:
#include <type_traits>
template<typename T, typename std::enable_if_t<std::is_integral<T>::value, bool> = true>
class Test
{
};
template<typename T, typename std::enable_if_t<!std::is_integral<T>::value, bool> = true>
class Test
{
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译上面的代码时,GCC 失败并出现以下错误:
<source>:2:84: error: template parameter 'typename std::enable_if<std::is_integral<_Tp>::value, bool>::type <anonymous>'
template<typename T, typename std::enable_if_t<std::is_integral<T>::value, bool> = true>
^~~~
<source>:6:85: note: redeclared here as 'typename std::enable_if<(! std::is_integral<_Tp>::value), bool>::type <anonymous>'
template<typename T, typename std::enable_if_t<!std::is_integral<T>::value, bool> = true>
^~~~
Run Code Online (Sandbox Code Playgroud)
但是,对函数使用类似的技术进行编译不会出现问题:
#include <type_traits>
template<typename T, typename std::enable_if_t<std::is_integral<T>::value, bool> = true>
void test()
{
}
template<typename …
Run Code Online (Sandbox Code Playgroud) 背景:
我正在尝试实现一个函数,我们称之为它mysort
,它接受可变数量的相同类型的参数并对它们进行排序。例如下面的代码应该打印1 2 3
template <typename ... Args>
void mysort(Args& ... args);
int main(int, char**)
{
int x = 3;
int y = 1;
int z = 2;
mysort(x, y, z);
cout << x << ' ' << y << ' ' << z << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
这是我想出的解决方案
#include <array>
#include <algorithm>
#include <functional>
template <typename T, typename ... Args>
void mysort(T& t, Args& ... args)
{
constexpr size_t n = sizeof...(Args) + 1; …
Run Code Online (Sandbox Code Playgroud)