欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實(shí)現(xiàn)自動(dòng)生成C++代碼的代碼生成器

 更新時(shí)間:2022年07月12日 11:45:16   作者:大CC  
這篇文章介紹了python實(shí)現(xiàn)C++代碼生成器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

遇到的問(wèn)題

工作中遇到這么一個(gè)事,需要寫很多C++的底層數(shù)據(jù)庫(kù)類,但這些類大同小異,無(wú)非是增刪改查,如果人工來(lái)寫代碼,既費(fèi)力又容易出錯(cuò);而借用python的代碼自動(dòng)生成,可以輕松搞定; 
(類比JAVA中的Hibernate自動(dòng)生成的數(shù)據(jù)庫(kù)底層操作代碼) 
下面介紹使用python字符串替換的方法;

Python字符串替換的幾種方法

1. 字符串替換 

將需要替換的內(nèi)容使用格式化符替代,后續(xù)補(bǔ)上替換內(nèi)容;

template = "hello %s , your website  is %s " % ("大CC","http://blog.me115.com")
print(template)

也可使用format函數(shù)完成:

template = "hello {0} , your website  is {1} ".format("大CC","http://blog.me115.com")
print(template)

注:該方法適用于變量少的單行字符串替換;

2. 字符串命名格式化符替換 

使用命名格式化符,這樣,對(duì)于多個(gè)相同變量的引用,在后續(xù)替換只用申明一次即可;

template = "hello %(name)s ,your name is %(name), your website  is %(message)s" %{"name":"大CC","message":"http://blog.me115.com"}
print(template)

使用format函數(shù)的語(yǔ)法方式:

template = "hello {name} , your name is {name}, your website  is {message} ".format(name="大CC",message="http://blog.me115.com")
print(template)

注:適用相同變量較多的單行字符串替換;

3.模版方法替換 

使用string中的Template方法;

from string import Template
tempTemplate = string.Template("Hello $name ,your website is $message")
print(tempTemplate.substitute(name='大CC',message='http://blog.me115.com'))

有了模版方法后,就可以將模版保存到文件單獨(dú)編輯,在生成的地方替換為需要的變量;

示例:代碼生成

這個(gè)示例使用以上講到的第三種方法; 
建立一個(gè)模版文件,里面需要替換的內(nèi)容使用${}變量替換; 
dao_cpp.template

///
/// @class ${CLASSNAME}
/// @brief Redis底層接口類 操作${TABLE_NAME}表
/// TABLE ${TABLE_NAME_UPPER}
/// @author dao_cpp_generator.py
/// @generate date: ${GENE_DATE}
/// [注:本文件為自動(dòng)生成,不需要人為編輯,若有修改,請(qǐng)通過(guò)配置py腳本來(lái)重新生成.]

#include "${CLASSNAME}.h"
#include "include/${TABLE_NAME}_t.h"
#include "RedisManager.h"
#include "common/LogMacros.h"
#include "common/StringUtility/OtherStringFunc.h"
#include "common/DateTime.h"

namespace redisdao{

#define PRIMARY_KEY "${PRIMER_KEY}"
const string ${CLASSNAME}::TABLE_NAME = "${TABLE_NAME}";
const string ${CLASSNAME}::TABLE_ID = "${TABLE_ID}"; //在數(shù)據(jù)庫(kù)中的表的唯一性標(biāo)識(shí)符
const string ${CLASSNAME}::KEY_SEPARETER = "${KEY_SEPARETER}";

${CLASSNAME}::${CLASSNAME}(void)
{
    if ( 0 == m_reHandler.EnsureConnect())
        m_bRedisConnected = true;
    else
        m_bRedisConnected = false;
}

${CLASSNAME}::~${CLASSNAME}(void)
{
}

int ${CLASSNAME}::InsertRecord(const string& strVal)
...

python代碼生成程序: 
cpp_generator.py

#! /usr/bin/env python
#coding=utf-8
#Redis底層操作類CPP文件生成程序(*RedisDao.cpp)
#author me115@126.com 2014-7-22
import os,sys,re,traceback
from datetime import datetime
from string import Template

class DaoCppGenerator:

    def generate(self):
        tableName = 'students'
        className = '%sRedisDao' %  tableName.capitalize()
        filePath = r'include/%s.cpp' % className
        class_file = open(filePath,'w')

        lines = []

        #模版文件
        template_file = open(r'dao_cpp.template','r')
        tmpl = Template(template_file.read())

        #模版替換
        lines.append(tmpl.substitute(
                    CLASSNAME = className,
                    TABLE_NAME = tableName,
                    TABLE_NAME_UPPER = tableName.upper(), 
                    GENE_DATE = datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                    TABLE_ID = '115',
                    EXPIRE_DATE = '06JUN14'))

        # 0.將生成的代碼寫入文件
        class_file.writelines(lines)
        class_file.close()

        print 'generate %s over. ~ ~' % filePath

有了這個(gè)程序,再配合一堆XML配置文件,就可以輕松生成各種C++程序代碼了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python?特殊詞匯過(guò)濾功能的實(shí)現(xiàn)

    python?特殊詞匯過(guò)濾功能的實(shí)現(xiàn)

    這篇文章主要介紹了python?特殊詞匯過(guò)濾功能的實(shí)現(xiàn),這就利用了python其中一個(gè)功能強(qiáng)大之處可以方便集成很多的非標(biāo)準(zhǔn)庫(kù),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Python 分享10個(gè)PyCharm技巧

    Python 分享10個(gè)PyCharm技巧

    這篇文章主要介紹了Python 分享10個(gè)PyCharm技巧,今天要跟大家分享幾個(gè)PyCharm小技巧,幫助大家提升工作效率!,需要的朋友可以參考下
    2019-07-07
  • Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)連接池實(shí)例詳解

    Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)連接池實(shí)例詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)Mysql數(shù)據(jù)庫(kù)連接池實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • python尋找list中最大值、最小值并返回其所在位置的方法

    python尋找list中最大值、最小值并返回其所在位置的方法

    今天小編就為大家分享一篇python尋找list中最大值、最小值并返回其所在位置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python使用pika庫(kù)調(diào)用rabbitmq交換機(jī)模式詳解

    python使用pika庫(kù)調(diào)用rabbitmq交換機(jī)模式詳解

    這篇文章主要介紹了python使用pika庫(kù)調(diào)用rabbitmq交換機(jī)模式詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-08-08
  • 舉例講解Python中的list列表數(shù)據(jù)結(jié)構(gòu)用法

    舉例講解Python中的list列表數(shù)據(jù)結(jié)構(gòu)用法

    這篇文章主要介紹了Python中的list列表數(shù)據(jù)結(jié)構(gòu)用法,列表是Python內(nèi)置的六種集合類數(shù)據(jù)類型中最常見(jiàn)的之一,需要的朋友可以參考下
    2016-03-03
  • python經(jīng)典趣味24點(diǎn)游戲程序設(shè)計(jì)

    python經(jīng)典趣味24點(diǎn)游戲程序設(shè)計(jì)

    這篇文章主要介紹了python經(jīng)典趣味24點(diǎn)游戲程序設(shè)計(jì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python類與實(shí)例的使用詳解

    Python類與實(shí)例的使用詳解

    面向?qū)ο笞钪匾母拍罹褪穷悾–lass)和實(shí)例(Instance),必須牢記類是抽象的模板,比如Student類,而實(shí)例是根據(jù)類創(chuàng)建出來(lái)的一個(gè)個(gè)具體的“對(duì)象”,每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同
    2022-08-08
  • Python實(shí)現(xiàn)通過(guò)文件路徑獲取文件hash值的方法

    Python實(shí)現(xiàn)通過(guò)文件路徑獲取文件hash值的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)通過(guò)文件路徑獲取文件hash值的方法,結(jié)合實(shí)例形式分析了Python針對(duì)文件進(jìn)行hash運(yùn)算的實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • python調(diào)用xlsxwriter創(chuàng)建xlsx的方法

    python調(diào)用xlsxwriter創(chuàng)建xlsx的方法

    今天小編就為大家分享一篇python調(diào)用xlsxwriter創(chuàng)建xlsx的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論