美文网首页
模板代码的组织结构

模板代码的组织结构

作者: 404Not_Found | 来源:发表于2022-02-07 14:43 被阅读0次
  • 作者: 雪山肥鱼
  • 时间:20220207 19:47
  • 目的: 模板代码的组织结构
# 模板代码的组织结构
# 模板的显式实例化、模板声明、代码组织结构

模板代码的组织结构

  1. 在.h 文件中,实现类内成员函数
#ifndef __TEMP__
#define __TEMP__

template<typename T>
class Myclass {
public:
    void func();
};

template<typename T>
void Myclass<T>::func() {
    std::cout << "in Myclass<T>::func" << std::endl;
}

//特化位置
template<>
class Myclass<int> {
public:
    void func();
};

//template<> 不要
void Myclass<int>:: func() {
    std::cout << "in Myclass<int>::func tehua" << std::endl;
}


#endif
  • 普通类:
    类定义和类实现要分别在.h头文件和.cpp源文件中。

  • 类模板
    定义和实现

编译项目时编译器会对每个.cpp源文件作为一个编译单元编译
如果多个.cpp源文件都实例化出来Myclass<int> 类,那么链接时编译器会选择其中一个 Myclass<int>, 其他的丢其掉,即 贪婪实例化。

同理 函数 模板

模板的显式实例化,模板声明,代码组织结构

模板实例化声明

ca.h

#ifndef __CA_H__
#define __CA_H__


template <typename T>
void myfunc(T v1, T v2) {
    std::cout << v1 + v2 << endl;
}

//类模板A 的声明
template<typename C>
class A {
public:
    template<typename T2>
    A(T2 v1, T2 v2);//构造函数模板

    template<typename T>
    void myft(T tmpt) {
        std::cout << tmpt << std:endl;
    }
    C m_ic;
};

template<typename C>
template<typename T2>
A<C>::A(T2 v1, T2 v2) {
    std::cout << v1 << v2 << std::endl;
}
#endif
test.cpp

#include <iostream>
#include "ca.h"

using namespace std;

//显式实例化 - 只在一个cpp 文件中 这样写,编译器会为其生成实例化代码,则其他cpp不需要实例化这个类了,
//只需要 extern 一下即可
template A<float>;
template void myfunc(int & v1, int & v2);

void myfunc() {
    A<float> a(1, 2);
    a.myft(3);//3
}
main.cpp
#include <iostream>
#include "ca.h"

using namespace std;

//每个.cpp文件独立编译,都会生成一个obj 都有一个 A<float> 类
//如果编译.cpp文件过多,会生成多个obj,多个 实例化的 A<float>类,则浪费时间。
//通过显式实例化避免此类开销
extern template A<float>;//实例化声明
extern template void myfunc(int & v1, int & v2);

int main(int argc, char ** argv) {

    A<float> a(1, 2);
    A<float> a2(1.1, 2.2);
    a.myft(3);//3
    return 0;
}

显式实例化的作用,大型项目中避免多次实例化类模板。在一个cpp中显式实例化后,其他cpp只要显式声明即可。

**同理 函数 模板 **

  • 引出的问题:
    显式实例化,不管类中的成员函数有没有用到,都会被实例化出来。除了,成员函数模板,因为其类型,仅仅提供一个 显式实例化,是不会被实例化的。

适用场景:
cpp 文件很多,且这个类模板中的成员函数比较少。

相关文章

  • 模板基础知识

    阅读经典——《C++ Templates》01 函数模板 类模板 非类型模板参数 一些技巧 模板代码的组织结构 一...

  • Shopify的主题结构分析(一)

    主题模板结构 其实在更改Shopify的主题代码或者模板配置项时,我们对于Shopify主题结构和代码的结构不...

  • Django的模板层

    python的模板:HTML代码+模板语法 模板语法之变量 在 Django 模板中遍历复杂数据结构的关键是句点字...

  • 一个优秀速开发框架是什么样的?

    1、代码模板化 快速开发框架一般都有统一的代码风格,同一分层的不同类代码,都是大同小异的模板化结构,方便使用模板工...

  • Go项目的测试代码1(基础)

    最近写了测试代码,整理了一下。 先看看简单的测试代码 查看测试结构。 目前编写测试代码普遍公认的模板结构。 1)a...

  • 设计模式--策略模式

    目录 本文的结构如下: 引言 什么是策略模式 模式的结构 典型代码 代码示例 策略模式和模板方法模式的区别 优点和...

  • <二>如何组织代码结构

    官网关于Workspaces的介绍 一个项目不同于几个代码示例,一个合理的代码组织结构是必须的。这里和官网介绍保持...

  • 3.5 django 模板引入与继承

    模板结构优化 引入模板 有时候一些代码是在许多模板中都用到的。如果我们每次都重复的去拷贝代码那肯定不符合项目的规范...

  • 如何组织合理的代码结构

    背景 那么应该如何组织代码呢? 在后端领域,大家通常使用mvc模式来分离不同的关注点,可惜的是很多同学使用有偏差:...

  • 组织结构图模板分享

    组织结构图 组织结构图是把企业组织分成若干部分,并且标明各部分之间可能存在的各种关系。这里所说的各种关系包括上下级...

网友评论

      本文标题:模板代码的组织结构

      本文链接:https://www.haomeiwen.com/subject/lytvkrtx.html