c ++ 17折叠表达式打印功能,可支持2,0000个元素

时间:2018-07-20 08:33:46

标签: c++ c++17 fold-expression

您好,如何使用20,000元素这样的大元素使它打印效率更高? 我花了很长时间才编译, 我尝试遵循  static const array of values in Variadic Template C++

但是我不能使其与折叠表达式一起使用,任何解决该问题的想法

#include <iostream>


template<typename T = int , typename Comp=std::less<T>>
struct Facility
{
  template<T ... list> 
  struct List
  {
    static void print()
    {
      // store in static array to compile faster
      constexpr static T args[sizeof...(list)] = {list...}; 
      // use for idiom for each except the last, but this time in reserve way
      // assgn char* space to empty char first
      const char* space = "";
      if (sizeof...(list) == 0)
      {
        // simple just call space to cout , if not warning no variable used
        std::cout <<'"' <<"Empty List" <<'"' << space  <<std::endl;
      }
      else if  (std::is_same<T, char>::value)
      {
        std::cout << '"';
       ((std::cout << space << args), ...);// compile error
        // simple just call space to cout , if not warning no variable used
        std::cout << '"' << space<< std::endl;
      }
      else
      {
        std::cout << '"';
        // fold expression bracket,L side will execute first 
        // the first round space is empty and later on become space
        (((std::cout << space << list), space = " "), ...);
        std::cout << '"' << std::endl;
      }    
    }  
  }; 




template<int ... intlist>
using IntList = typename Facility<int>::List<intlist...>;

template<char ... charlist>
using CharList = typename Facility<char>::List<charlist...>;

template<short ... shortlist>
using ShortList = typename Facility<short>::List<shortlist...>;

template<unsigned short ... shortlist>
using UnsignedShortList = typename Facility<unsigned short>::List<shortlist...>;

template<long ... list>
using LongList = typename Facility<long>::List<list...>;

int main()
{
    std::cout << "********Testing Basic List Capabilities*********\n";  
    using List1 = IntList<1,2,3,4>;
    using List2 = IntList<9, 0, -1, -200>;
    using List3 = IntList<LONG20000LIST>;
    List1::print();
    List2::print();
    List3::print();

    using String1 = CharList<'a', 'b', 'c'>;
    using String2 = CharList<' ', 'w', 'o', 'r', 'l', 'd' >;
    using EmptyString = CharList<>;
    String1::print();
    String2::print();
    EmptyString::print();
    std::cout << "************Finished Testing *******************\n\n";
}

2 个答案:

答案 0 :(得分:0)

这是我的解决方案,感谢大家的帮助

pg_upgrade

答案 1 :(得分:-1)

这是您需要声明数组的方式:

var permission = true;
var result =
    $.post({
        dataType:"json",
        url: "ajax/check_permissione.php",
        data: { 'user-id': 1 }
    }).done(function(data, status) {
        if ( data.PermissionOK == 1 ) {
            permission = true;
        } else {
            permission = false;
        }
    });

// called when ajax process done.
result.promise().done(function() {
    // $("#test").select2({ ~
});