相关疑难解决方法(0)

使用C++ 11可变参数模板在编译时快速排序

我刚刚通过使用C++ 11可变参数模板在编译时对其进行评估来实现快速排序算法.但是,当数据集太大时,我遇到性能问题.

#include <iostream>

using namespace std;

template<int... vs>
struct Seq
{}; 
template<int v1, int...vs>
struct Seq<v1, vs...>{
};


template<typename newT, typename srcT>
struct PushFront{
};
template<int vadded, int...vs>
struct PushFront<Seq<vadded>, Seq<vs...>>{
  typedef Seq<vadded, vs...> ResultType;
};

template<typename T>
struct PopFront{
};
template<int v1, int...vs>
struct PopFront<Seq<v1, vs...>>{
  typedef Seq<vs...> RemaindType;
  typedef Seq<v1>    ResultType;
};

template<typename T1, typename T2>
struct CatSeq{};
template<int...v, int...us>
struct CatSeq<Seq<v...>, Seq<us...>>{
  typedef Seq< v..., us... >  ResultType;
};


template<bool c, typename NewT, typename TrueClsT, typename …
Run Code Online (Sandbox Code Playgroud)

c++ metaprogramming quicksort variadic-templates c++11

30
推荐指数
2
解决办法
3126
查看次数

检查variadic模板参数的唯一性

我希望variadic模板参数必须唯一.我知道多继承时,不允许相同的类继承.

struct A{};
struct B: A, A{}; // error
Run Code Online (Sandbox Code Playgroud)

使用这个规则,我做了一些代码.

#include <type_traits>

template< class T> struct id{};
template< class ...T> struct base_all : id<T> ... {};

template< class ... T>
struct is_unique
{
     template< class ... U>
 static constexpr bool test( base_all<U...> * ) noexcept { return true; }

template< class ... U>
static constexpr bool test( ... ) noexcept { return false;}


static constexpr bool value = test<T...>(0);
};

int main()
{
    constexpr bool b = is_unique<int, float, double>::value; …
Run Code Online (Sandbox Code Playgroud)

c++ type-traits variadic-templates c++11

22
推荐指数
2
解决办法
2094
查看次数