template

1、default template arguments can't be used in function templates

    (1)template <class T=int>//错误
        T fun(T m)
        {
        return m;

        }

    (2)

        template <class T,int N=1>//错误
        T fun(T m)
        {
        return m*N;

        }

    (3)常规参数必须显式的给出对应于常规参数的模板实参

        例: template <class T,int N>
                T fun(T m)
                {
            return m*N;
                }
                int main()
                {
                fun<int,3>(1);//int不可省
                return 0;

                }

         例:template <int N,class T>
                T fun(T m)
                {
                return m*N;
                }
                int main()
                {
                fun<3>(1);//int可省
                return 0;
                }


2、default template arguments can be used in class templates

#include <iostream>

using namespace std;

template <class T=int,int N=10>////模板类的默认模板参数 
class Set
{
public:
    Set(int s=N);
    ~Set();
    int GetSize();
private:
    T *data;
    int size;
};


template <class T,int N>////默认模板参数的类模板成员函数类外定义方式,在定义这里就不用再声明默认模板参数类型了 

Set<T,N>::Set(int s)
{
    size=s;
    data=new T[size];
}


template <class T,int N>
Set<T,N>::~Set()
{
    delete [] data;
}


template <class T,int N>

int Set<T,N>::GetSize()
{
return size;
}


int main()

{
Set<> s;////因为已经是默认的模板参数了,所以可以不用在实例化类的时候声明类型,但是尖括号是必须要有的
cout<<s.GetSize();
        return 0;
}
### Python中Template的使用方法 #### 1. 模板字符串的基本概念 Python 的 `string.Template` 提供了一种简单的方式来创建可替换字段的模板字符串。通过初始化 `Template` 类并调用其方法,可以实现动态字符串生成[^3]。 #### 2. 初始化与基本用法 首先需要从 `string` 模块导入 `Template` 类,并通过构造函数传递包含占位符的字符串: ```python from string import Template template = Template("Hello, $name") result = template.substitute(name="Alice") print(result) # 输出: Hello, Alice ``` 上述代码展示了如何使用 `$` 符号定义占位符,并通过 `substitute` 方法完成替换[^3]。 #### 3. 替换多个变量 当模板中包含多个占位符时,可以通过字典或关键字参数传递所有需要替换的值: ```python template = Template("User: $user, Score: $score") data = {"user": "Bob", "score": 95} result = template.substitute(data) print(result) # 输出: User: Bob, Score: 95 ``` 此功能允许更灵活地处理复杂的字符串格式化需求[^3]。 #### 4. 安全替换机制 如果某些占位符未被提供值,则 `substitute` 方法会抛出异常。为了避免这种情况,可以使用 `safe_substitute` 方法,它会保留未替换的占位符而不中断程序执行: ```python template = Template("User: $user, Score: $score") result = template.safe_substitute(user="Charlie") print(result) # 输出: User: Charlie, Score: $score ``` 这种机制在部分数据缺失的情况下尤其有用。 #### 5. 自定义占位符分隔符 默认情况下,占位符以 `$` 开头。如果需要更改占位符标识符,可以通过继承 `Template` 类并重写 `delimiter` 属性来实现: ```python class CustomTemplate(Template): delimiter = "#" template = CustomTemplate("Greeting: #greeting") result = template.substitute(greeting="Hi") print(result) # 输出: Greeting: Hi ``` 自定义分隔符增强了模板字符串的灵活性,使其适应更多场景。 #### 6. 应用场景 模板字符串常用于日志记录、电子邮件生成等需要频繁替换变量但逻辑简单的场景。例如,在日志记录中动态插入上下文信息: ```python log_template = Template("[$level] $message") log_info = log_template.substitute(level="INFO", message="System started") log_error = log_template.substitute(level="ERROR", message="File not found") print(log_info) # 输出: [INFO] System started print(log_error) # 输出: [ERROR] File not found ``` #### 7. 与其他工具结合 在 Web 开发中,模板字符串的概念也可以扩展到更复杂的模板引擎,如 Flask 的 `render_template` 方法。通过将数据传递给 HTML 模板文件,可以实现动态网页生成[^1]。 ```python from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): name = 'John Doe' age = 30 hobbies = ['Reading', 'Gardening', 'Cooking'] return render_template('index.html', name=name, age=age, hobbies=hobbies) if __name__ == '__main__': app.run() ``` #### 8. 与 f-string 的对比 虽然 f-string 提供了更强大的表达式支持和更高的性能,但在需要与国际化工具或其他外部系统集成时,模板字符串可能更具优势。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值