首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在cpp文件中实现非模板类模板成员

,可以通过以下步骤进行:

  1. 首先,在头文件中声明非模板类,并定义类的成员函数和成员变量。在类的定义中,可以使用模板参数作为成员函数的参数类型或返回类型,但是不能在类的定义中实现这些成员函数。
代码语言:txt
复制
// MyClass.h

#ifndef MYCLASS_H
#define MYCLASS_H

template<typename T>
class MyClass {
public:
    MyClass();
    void myFunction(T value);

private:
    T myVariable;
};

#endif
  1. 在cpp文件中实现非模板类的成员函数。在实现成员函数时,需要在函数名前面加上类名和模板参数。
代码语言:txt
复制
// MyClass.cpp

#include "MyClass.h"

template<typename T>
MyClass<T>::MyClass() {
    // 实现构造函数
}

template<typename T>
void MyClass<T>::myFunction(T value) {
    // 实现成员函数
    myVariable = value;
}
  1. 在使用非模板类的地方,包括其他cpp文件或主函数中,需要包含头文件,并根据需要实例化模板类。
代码语言:txt
复制
// main.cpp

#include "MyClass.h"

int main() {
    MyClass<int> myObject;
    myObject.myFunction(10);

    return 0;
}

这样,就可以在cpp文件中实现非模板类的模板成员。在使用时,可以根据需要实例化模板类,并调用成员函数进行操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【C++】泛型编程 ⑮ ( 模板示例 - 数组模板 | 自定义持有指针成员变量 )

    一、支持 数组模板 存储的 自定义 1、可拷贝和可打印的自定义 在上一篇博客 , 定义了 可拷贝 与 可打印 的 自定义 Student , 可以被存放到 数组模板 ; 由于其 成员变量...* m_name 指针成员 ; 那么需要进行 堆内存管理 , 构造函数 分配堆内存 ; 析构函数 释放堆内存 ; 为了避免 浅拷贝 问题出现 , 需要 进行 等号 = 运算符重载 ; 以及...s); } 然后 , 外部 的 全局函数 , 实现 重载左移运算符函数 ; // 重载左移运算符实现 ostream& operator<<(ostream& out, const Student...主函数代码文件 #define _CRT_SECURE_NO_WARNINGS #include "iostream" using namespace std; // 此处注意, 模板 声明与实现...分开编写 // 由于有 二次编译 导致 导入 .h 头文件 模板函数声明 无法找到 函数实现 // 必须 导入 cpp 文件 #include "Array.cpp" class Student

    17010

    如何在Excel实现三联模板

    前言 一些报表打印应用场景,会有类似于如下图所示的排版格式: 一般情况下将这种类型的需求称为“三联”类型,这种三联需求的关键点在于以下两点: 1....下面小编就将为分别为大家介绍如何实现上面两点需求: 1....使用代码实现将数据对象绑定在一个单元格内: 同时,使用自定义单元格来实现文本的拼接: 完整代码可以点击这里:https://docs.grapecity.com.cn/spreadjs/practice...关于第一点,可以选中区域,并使用上方的按钮来设置需要向下移动的区域,将其记录在tag: 代码如下: 而第二点,则稍微有点麻烦,因为真实的文本需要几行单元格展示,不仅和文字的长度有关,还与单元格的宽度...总结 以上就是Excel实现横向排版/三联模板的方法介绍。

    24920

    【C++】泛型编程 ⑪ ( 模板的运算符重载 - 函数实现 写在外部的不同的 .h 头文件和 .cpp 代码 )

    模板 函数声明 与 函数实现 分开进行编码 , 有 三种 方式 : 模板 的 函数声明 与 函数实现 都写在同一个 , 也就是没有分开进行编码 ; 模板 的 函数实现 外部进行 ,...函数声明 和 实现 写在相同的 .cpp 源码文件 ; 模板 的 函数实现 外部进行 , 函数声明 和 实现 写在不同的 .h 和 .cpp 源码文件 ; 博客 【C++】泛型编程 ⑨ (...; 博客 【C++】泛型编程 ⑩ ( 模板的运算符重载 - 函数实现 写在外部的同一个 cpp 代码 | 模板 的 外部友元函数二次编译问题 ) , 分析了 第二种情况 , 模板 的...函数实现 外部进行 , 写在 一个 cpp 源码文件 ; 本篇博客 , 开始分析 第三种 情况 , 函数实现 外部进行 , 函数声明 和 实现 写在不同的 .h 和 .cpp 源码文件...- 函数实现 写在外部的同一个 cpp 代码 | 模板 的 外部友元函数二次编译问题 ) , 分析了 第二种情况 , 模板 的 函数实现 外部进行 , 写在 一个 cpp 源码文件

    23510

    C++11模板:如何判断是否有指定名称的成员变量?

    《C++11之美》 《C++模板,判断是否存在成员函数,实现差异化操作 》 我现在关心的是如何判断一个中有成员变量?...成员变量有可能是数组,也可能是其他的。...看了上面关于判断成员函数的文章,理解其原理后,判断是否成员变量,也是差不多的道理,实现起来非常简单: /* 模板函数,检查T是否有名为's'的成员 * value 为bool型检查结果 * type...std::is_void::value}; }; 上面这个模板是用来检查是否有名为s的成员, 以opencl的cl_int2向量类型举例,下面是cl_int2的定义: /* ---...对于数组成员变量,去掉std::decay这一层,直接写成 static auto check(_T)->decltype(_T::s); 是完全可以的(不论gcc还是vs2015)。

    4.2K10

    【C++】泛型编程 ⑩ ( 模板的运算符重载 - 函数实现 写在外部的同一个 cpp 代码 | 模板 的 外部友元函数二次编译问题 )

    模板 函数声明 与 函数实现 分开进行编码 , 有 三种 方式 : 模板 的 函数声明 与 函数实现 都写在同一个 , 也就是没有分开进行编码 ; 模板 的 函数实现 外部进行 ,...函数声明 和 实现 写在相同的 .cpp 源码文件 ; 模板 的 函数实现 外部进行 , 函数声明 和 实现 写在不同的 .h 和 .cpp 源码文件 ; 上一篇博客 【C++】泛型编程 ⑨...( 模板的运算符重载 - 函数声明 和 函数实现 写在同一个 | 模板 的 外部友元函数问题 ) 实现了第一种情况 , 模板 的 函数声明 与 函数实现 都写在同一个 , 也就是没有分开进行编码...; 本篇博客 , 开始分析 第二种情况 , 模板 的 函数实现 外部进行 , 写在相同的 .h 和 .cpp 源码文件 ; 一、模板 - 函数声明与函数实现分离 1、模板 外部 实现 构造函数...泛型类型 指明 , 函数名称后面 , 使用 注明泛型类型 , 但是 模板 声明 友元函数 时 , 就需要指定 泛型类型 ; 这样才能将 模板的 泛型 T , 与 友元函数 外部实现

    20810

    C++ 开发,使用模板实现自定义数组

    需求描述: 通过使用 C++ 模板的特性,实现一个能够存储任意类型的数组。可以通过尾部追加的方式在数组完成数据传入,且可以通过尾部操作删除数组最后一个元素。...1个元素的值为:0 数组的第2个元素的值为:1 数组的第3个元素的值为:2 数组的第4个元素的值为:3 数组的第5个元素的值为:4 数组的容量为:10 数组的长度为:5 Pop一次后数组的容量为...:10 Pop一次后数组的长度为:4 Pop 一次后,此时数组内的数据如下: 数组的第1个元素的值为:0 数组的第2个元素的值为:1 数组的第3个元素的值为:2 数组的第4个元素的值为:3 使用拷贝构造函数创建对象...demo demo 数组的第1个元素的值为:0 demo 数组的第2个元素的值为:1 demo 数组的第3个元素的值为:2 demo 数组的第4个元素的值为:3 在数组插入自定义类型: 自定义类型数组的第...1个人的 id 为:1 姓名为:赵云 自定义类型数组的第2个人的 id 为:3 姓名为:刘备 自定义类型数组的第3个人的 id 为:2 姓名为:诸葛亮 Note: 自定义类型数组的无参构造函数不能省略

    89710

    【C++】泛型编程 ⑬ ( 模板示例 - 数组模板 | 构造函数和析构函数 的 声明与实现 | 普通成员函数 的 声明与实现 | 外部友元函数 的 声明与实现 )

    一、模板示例 - 数组模板 1、需求分析 模板 的 作用就是 令 算法 和 数据类型分离 ; 本篇博客 开始 使用 模板 开发一个 数组 , 数组 可以维护 不同类型的 元素数据 , 如...声明时 , 前面加上 模板类型声明 template , 说明要使用类型 T ; Array , 声明 构造函数 , 拷贝构造函数 , 析构函数 , 不需要...的 声明与实现 重载 数组下标 [] 操作符 , 使用 模板内部 的 成员函数即可完成 ; 普通成员函数 的 声明 : 数组下标 运算符 重载 , 返回值是一个 T 类型的 数据 的引用 ; 数组下标...的 实现 : 模板 外部 实现 数组下标 [] 操作符重载 函数 , 首先 , 注明 模板类型 template , 本次 函数实现 需要使用 该 泛型类型 ; 然后...模板函数声明 无法找到 函数实现 // 必须 导入 cpp 文件 #include "Array.cpp" int main() { // 验证 有参构造函数 Array array

    46010

    C++编译与链接(0)-.h与.cpp的定义与声明

    static函数 不同的cpp可以定义函数原型一样的函数 不同的cpp的名字可以一样 成员与函数 .h定义,所有成员必须在声明,cpp实现 静态的常量整形数据成员不能就地初始化...(*C++11,标准允许使用等号=或者花括号{}进行就地的静态成员变量初始化) 内部定义的成员函数将自动作为inline处理 .h外部定义的函数需要加上inline说明 否则在被include...模板函数与模板的声明与实现必须放在一个文件 总结 是否可以.h定义 不同.cpp是否可以重名 特殊说明 函数 不可以,会出现重定义错误 不可以 内联函数 可以 可以 为了确保所有调用该...- 不可以 (*C++11,标准允许使用等号=或者花括号{}进行就地的静态成员变量初始化) 成员函数 ------------------ ---------------- .h外部定义的函数需要加上...需要到头文件以外去定义它) 的静态的常量整形数据成员 ------------------ 可以 特殊说明 模板 模板函数与模板的声明与实现必须放在一个文件 至于为什么会这样,与C++的编译和链接

    3.6K70

    【C++】泛型编程 ⑨ ( 模板的运算符重载 - 函数声明 和 函数实现 写在同一个 | 模板 的 外部友元函数问题 )

    一、模板 - 函数声明与函数实现分离 1、函数声明与函数实现分离 项目开发 , 需要 将 函数声明 与 函数实现 分开进行编码 ; 将 函数声明 与 函数实现 分开进行编码 , 有 三种 方式 :...模板 的 函数声明 与 函数实现 都写在同一个 ; 模板 的 函数实现 外部进行 , 写在相同的 .h 和 .cpp 源码文件 ; 模板 的 函数实现 外部进行 , 写在不同的....h 和 .cpp 源码文件 ; 2、代码示例 - 函数声明与函数实现分离 对于下面的 Father 的 printValue 函数 , // 声明 模板 template <typename...; 二、普通的运算符重载 - 函数声明 和 函数实现 写在同一个 下面的是一个 普通 , 其中定义了 成员变量 和 成员方法 ; 并为其重载了 左移运算符 和 加法运算符 ; 其中 加法运算符...三、模板的运算符重载 - 函数声明 和 函数实现 写在同一个 1、模板 的 外部友元函数问题 将上述 " 普通的运算符重载 - 函数声明 和 函数实现 写在同一个 " 示例改造成 模板

    25710

    【c++】模板编程解密:C++的特化、实例化和分离编译

    即:模板的基础上,针对特殊类型所进行特殊化的实现方式。...源文件: .cpp 或 .cc 文件,包含定义文件声明过的成员函数、全局变量的定义等。...因此,最通用且常用的方法是将模板的定义放在头文件 前面我们知道,单个函数,进行定义分离没有错误,为什么模版不行呢? 单个函数(模板函数)和模板在有很大的不同,特别是声明和定义分离。...模板函数的声明和定义分离 对于模板函数,你可以文件声明它们,并在一个单独的源文件定义它们。...编译器处理模板函数的声明时,无需知道函数的实现细节,它只需要知道函数的签名(返回类型、函数名和参数列表)。

    54310

    【C++】泛型编程 ⑫ ( 模板 static 关键字 | 模板 static 静态成员 | 模板使用流程 )

    模板 函数声明 与 函数实现 分开进行编码 , 有 三种 方式 : 模板 的 函数声明 与 函数实现 都写在同一个 , 也就是没有分开进行编码 ; 模板 的 函数实现 外部进行 ,...函数声明 和 实现 写在相同的 .cpp 源码文件 ; 模板 的 函数实现 外部进行 , 函数声明 和 实现 写在不同的 .h 和 .cpp 源码文件 ; 博客 【C++】泛型编程 ⑨ (...; 博客 【C++】泛型编程 ⑩ ( 模板的运算符重载 - 函数实现 写在外部的同一个 cpp 代码 | 模板 的 外部友元函数二次编译问题 ) , 分析了 第二种情况 , 模板 的...函数实现 外部进行 , 写在 一个 cpp 源码文件 ; 博客 【C++】泛型编程 ⑪ ( 模板的运算符重载 - 函数实现 写在外部的不同的 .h 头文件和 .cpp 代码 ) ,...分析 第三种 情况 , 函数实现 外部进行 , 函数声明 和 实现 写在不同的 .h 和 .cpp 源码文件 ; 一、模板使用流程 1、模板 定义流程 模板 定义流程 : 首先 , 定义一个

    24010

    【C++】模板进阶

    ---- 三、模板的分离编译 阅读我博客的同学会发现,自从学习了模板以后,凡是要用到模板我们成员函数的声明和定义都是放在一起的,或者是直接在给出函数的定义,而不提供函数的声明,比如我们模拟实现的...vector、list、stack、queue、priority_queue 等容器; 那为什么我们不像C语言或者模板那样将成员函数的声明和定义进行分离呢?...stack 进行声明和定义分离,注意: 1、模板的外部成员定义不得具有默认参数,即模板声明与定义分离时不能成员函数不能使用缺省参数; 2、模板成员函数分离定义时必须指明该函数是属于那个的...了解了这些知识以后,我们就可以得出程序报错的原因了: 1、预处理时,Stack.h 头文件分别展开到 Stack.cpp 和 Test.cpp文件; 2、经过编译,Stack.cpp 和...(这种方式使用于较大时,方便别人快速了解我们的) 3、注:这两种方法都有一个缺点 – 会暴露源码,因为函数的声明和定义是一个文件的,我们将提供给别人使用时不得不将源码也暴露给别人,这也是模板的一个缺点

    44900

    关于模板函数声明与定义的问题

    若将模板函数声明放在tem.h,模板定义放在tem.cpp,main.cpp包含头文件,调用add,按道理说应该实例化int add(int,int)函数,即生成add函数的相应代码,但是此时仅有声明...实际模板的实例化时,实际上是分几步的,首先当然是模板的实例化,然后还有成员函数的实例化,我们知道的定义,其实只是声明了成员函数,编译器实际上是把成员函数编译成修改名称后的全局函数的...,因此使用模板的时候,首先会初始化模板,同时初始化模板相应的构造函数,使用模板的实例调用相应的成员函数时,才会初始化模板成员函数。...如果类模板成员函数的定义与的定义不在同一个编译单元(分离式编译),此时调用成员函数便会出现未定义的错误。而当我们像代码那样某个地方显式的调用它的时就不会出现此类问题了。...c++primer上面只说了模板成员函数可以不在头文件定义,却始终感觉说得不清不楚,因为实际上像普通那样的定义与实现放在不同的文件的话,是会链接出错的。

    2.3K30

    模板的一些语法问题

    模板无疑是非常复杂的,一个模板。你把成员函数实现内,是比较简单的。当然,你也可以实现外。这时候你有两个选择,同一个文件实现成员函数,另一个.cpp实现成员函数,头文件只包含函数声明。...当你写在同一个文件里的时候,只需要在函数实现的地方处处加上模板定义以及表明是一个模板了即可。...{ this->a = a; } 这时候,在你的main.cpp里包含这个头文件,编译即可正常通过。 但是当你文件里写上函数声明,.cpp文件里写上函数实现。...这时候你main.cpp包含头文件之后,进行编译,会发现一堆错误,说找不到函数。对于模板出现的地方,你应当包含.cpp文件,这样就能编译通过。...还有就是我们模板尽量不要使用友元函数了,除非重载>运算符。

    41510
    领券