Clang3.9使用变参模拟实现CheckerFn和Checker
我们提供的服务有:网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、沧县ssl等。为近1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的沧县网站制作公司
一,使用变参实现CheckerFn
1,头文件
/********************************* * * Author : szyu * * Date : 2017.1.4 * ***********************************/ #ifndef __SZYU_CLANG__ #define __SZYU_CLANG__ #include/******************************** * * clang3.9使用变参实现CheckerFn * *********************************/ template class CheckerFn; template class CheckerFn { private: typedef T (*Func)(Args...); Func Fn; public: CheckerFn() { std::cout << "In CheckerFn::CheckerFn()" << std::endl; } CheckerFn( Func f ) : Fn( f ) { std::cout << "In CheckerFn::CheckerFn(Func f)" << std::endl; } T operator()( Args... args) const { Fn( args... ); } }; #endif
2,测试用例
/********************************
*
* Author : szyu
*
* Date : 2017.1.4
*
***********************************/
#include "param.h"
void
func11()
{
std::cout << "In func11" << std::endl;
}
void
func12( int v )
{
std::cout << "In func12" << std::endl;
std::cout << "Args..." << v << std::endl;
}
void
func13( int v, char ch )
{
std::cout << "In func13" << std::endl;
std::cout << "Args1..." << v << ", Args2..." << ch << std::endl;
}
void
test1()
{
typedef CheckerFn CheckOne;
CheckOne one( func11 );
one();
std::cout << "**********************************" << std::endl;
typedef CheckerFn CheckTwo;
CheckTwo two( func12 );
int value = 7;
two( value );
std::cout << "**********************************" << std::endl;
typedef CheckerFn CheckThree;
CheckThree three( func13 );
value = 9;
char ch = 'B';
three( value, ch );
}
int
main( int argc, char *argv[] )
{
test1();
return 0;
} 3,执行结果
![[C++模板]Clang3.9使用变参模拟实现CheckerFn和Checker](/upload/otherpic63/226532.jpg)
二,使用变参实现Checker
1,头文件
/********************************* * * Author : szyu * * Date : 2017.1.4 * ***********************************/ #ifndef __SZYU_CLANG__ #define __SZYU_CLANG__ #include/******************************** * * clang3.9使用变參实现Checker * *********************************/ class Register1 { public: static void _register() { std::cout << "In Register1::_register()" << std::endl; } }; class Register2 { public: static void _register() { std::cout << "In Register2::_register()" << std::endl; } }; class Register3 { public: static void _register() { std::cout << "In Register3::_register()" << std::endl; } }; template class Checker : public T1, public Args... { public: static void _register() { std::cout << "In Checker ::_register()" << std::endl; T1::_register(); Checker ::_register(); } }; template class Checker { public: static void _register() { std::cout << "In Checker ::_register()" << std::endl; T1::_register(); } }; #endif
2,测试用例
/*********************************
*
* Author : szyu
*
* Date : 2017.1.4
*
***********************************/
#include "param2.h"
void
test1()
{
Checker::_register();
std::cout << "**********************************" << std::endl;
Checker::_register();
std::cout << "**********************************" << std::endl;
Checker::_register();
}
int
main( int argc, char *argv[] )
{
test1();
return 0;
} 3,执行结果
![[C++模板]Clang3.9使用变参模拟实现CheckerFn和Checker](/upload/otherpic63/226536.jpg)