在CPP文件中实现非模板类的模板成员
Implement template member of non-template class in cpp file
我有一个类:
// A.h
class A
{
void foo();
template <class T> void bar( T someVar );
}
#include "A.tcpp"
当我构建它时,会收到链接器错误。但是,如果整个类都是模板,那么上面的示例将完全构建。所以我的问题是:
当具有模板成员函数而不是拥有模板类时,我如何坚持使用CPP文件中所有定义的模式?
如果要将具有模板函数的类和非模板函数拆分为标头文件和TCPP文件,则只需将模板定义放在TCPP文件中。非模板定义仍然需要进入常规CPP文件。
将非模板代码放在TCPP文件中包含它回到标题文件中,然后意味着它在包含在其中的每个翻译单元中定义。
在这种情况下,这意味着您应该拥有
// A.h
class A
{
void foo();
template <class T> void bar( T someVar );
}
#include "A.tcpp"
// A.tcpp
template <class T> void A::bar( T someVar ) { some code; }
// A.cpp
#include "A.h"
void A::foo() { some code; }
我找到了解决方案,它并不像我想要的那样好,但是在我的情况下它会做到。我们可以在TCPP文件的末尾插入以下行:
template void A::bar<int>( int );
// And so on, for all types that should be supported.
它称为函数模板实例。
相关文章:
- 内置函数可查看CPP中的成员变量
- 静态 CPP 中的非静态成员
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- 将类成员函数的模板定义放在 CPP 文件中C++隐式实例化而不是 .H 允许吗?
- 访问类成员的成员变量时 cpp 程序挂起
- 无法从.cpp访问 .h 文件中的私有成员变量
- 在定义(.cpp文件)中初始化静态浮点 constexpr 成员是可能的
- 在.cpp文件中实现时访问私有成员
- CPP成员对C回调包装器的反馈
- 如何访问与另一个类不同的类的 cpp 文件的成员函数
- 在CPP文件中实现非模板类的模板成员
- 如何在 .cpp 文件中为私有类成员定义 friend 运算符<<而不是在标头中
- 将CPP类成员设置为SQLite DB中的列
- CPP:无法使用 -> 通过指针获取成员的值
- C++建造者 - 件.cpp(20): E2316 'Button1Click'不是'TForm'的成员
- CPP中的私有静态常规成员变量与const变量
- 如何通过其他.cpp文件中的类变量编辑公共成员变量
- 无法从单独的.cpp使用模板化成员编译/链接类
- 初始化 cpp 文件中的私有静态成员变量.错误:成员是私有的
- 在两个构造函数之前将我的静态数据成员在 CPP 文件中初始化为 0