specialisations.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 123 行

CPP
123
字号
//  (C) Copyright John Maddock 2000. //  Use, modification and distribution are subject to the //  Boost Software License, Version 1.0. (See accompanying file //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// Simple program to output some template specialisations for the type_traits library.//#include <fstream>using namespace std;unsigned specializations = 30;int main(){   unsigned i, j;   ofstream os("specialisations");   //   // generate is_function tester prototypes:   for(i = 0; i <= specializations; ++i)   {      os << "template <class R";      for(j = 0; j < i; ++j)      {         os << ", class A" << j;      }      os << ">\n::boost::type_traits::yes_type is_function_tester(R (*)(";      if(i == 0)         os << "void";      else      {         for(j = 0; j < i; ++j)         {            if(j) os << ", ";            os << "A" << j;         }      }      os << "));" << endl;   }   os << endl << endl;   //   // generate is_function_helper partial specialisations:   //   for(i = 0; i < specializations; ++i)   {      os << "template <class R";      for(j = 0; j < i; ++j)      {         os << ", class A" << j;      }      os << ">\nstruct is_function_helper_base<R (*)(";      if(i == 0)         os << "void";      else      {         for(j = 0; j < i; ++j)         {            if(j) os << ", ";            os << "A" << j;         }      }      os << ")>{ BOOST_STATIC_CONSTANT(bool, value = true); };" << endl;   }   os << endl << endl;   //   // generate is_member_pointer_helper tester prototypes:   for(i = 0; i <= specializations; ++i)   {      os << "template <class R, class T";      for(j = 0; j < i; ++j)      {         os << ", class A" << j;      }      os << ">\n::boost::type_traits::yes_type is_member_pointer_helper(R (T::*)(";      if(i == 0)         os << "void";      else      {         for(j = 0; j < i; ++j)         {            if(j) os << ", ";            os << "A" << j;         }      }      os << "));" << endl;   }   os << endl << endl;   //   // generate is_member_pointer partial specialisations:   //   for(i = 0; i < specializations; ++i)   {      os << "template <class R, class T";      for(j = 0; j < i; ++j)      {         os << ", class A" << j;      }      os << ">\nstruct is_member_pointer<R (T::*)(";      if(i == 0)         os << "void";      else      {         for(j = 0; j < i; ++j)         {            if(j) os << ", ";            os << "A" << j;         }      }      os << ")>{ BOOST_STATIC_CONSTANT(bool, value = true); };" << endl;   }   os << endl << endl;   return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?