新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
[C++模板]Clang3.9使用變參模擬實(shí)現(xiàn)CheckerFn和Checker
Clang3.9使用變參模擬實(shí)現(xiàn)CheckerFn和Checker
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、滄縣ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的滄縣網(wǎng)站制作公司
一,使用變參實(shí)現(xiàn)CheckerFn
1,頭文件
/********************************* * * Author : szyu * * Date : 2017.1.4 * ***********************************/ #ifndef __SZYU_CLANG__ #define __SZYU_CLANG__ #include/******************************** * * clang3.9使用變參實(shí)現(xiàn)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 CheckerFnCheckOne; 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,執(zhí)行結(jié)果
二,使用變參實(shí)現(xiàn)Checker
1,頭文件
/********************************* * * Author : szyu * * Date : 2017.1.4 * ***********************************/ #ifndef __SZYU_CLANG__ #define __SZYU_CLANG__ #include/******************************** * * clang3.9使用變參實(shí)現(xiàn)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,執(zhí)行結(jié)果
當(dāng)前文章:[C++模板]Clang3.9使用變參模擬實(shí)現(xiàn)CheckerFn和Checker
文章鏈接:http://fisionsoft.com.cn/article/jiiips.html