是否有一种方法可以避免在大量文件中实例化大量模板
Is there a way avoid having to instantiate a lot of templates in a lot of files?
我正在编写可以利用函子的cuda内核,这些函子作为模板的参数传递。例如:
template<typename Functor> void myKernel(float arg1, float* arg2, Functor f) {
// Do stuff that will involve f
}
这些函子是在头文件中定义的,我将其包含在每个cpp文件中,对于每个文件,我必须用所有的函子实例化所有的内核:
template<> myKernel<Add>(float, float*, Add)
template<> myKernel<Sub>(float, float*, Sub)
这是大量的代码重复,我们必须记住为每个新的函函数添加新的行。有没有办法一次性定义这一切?
看看extern template declarations.
关于外部模板有一些微妙的细节,特别是14.7.2.10:
除了内联函数和类模板特化之外,显式实例化声明具有抑制它们所指向的实体的隐式实例化。
这意味着下面的语句只会抑制非内联成员函数f在其他翻译单元中的实例化,而不会抑制g的实例化:
template<typename T> class A {
public:
void g() {} // inline member function
void f();
};
template<typename T> void A::f() {} // non-inline
只需在头文件中添加实例化,您就不必每次都记得指定它们。
相关文章:
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 将类成员函数的模板定义放在 CPP 文件中C++隐式实例化而不是 .H 允许吗?
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- 如何使用 c++ 从另一个 cpp 文件中的 main.cpp 调用实例化类
- 如何在C++实现文件中实例化类?
- 模板类静态在最终二进制文件中跨共享库以不同方式实例化是否一致
- 从文件实例化:构造函数采用std:ifstream&作为参数
- 如何将模板定义和实例化分为HPP和IPP文件
- 在头文件中包含std::vector会导致模板实例化错误
- C++ 类文件中的对象实例化
- 模板函数实例化文件
- C++ 无法实例化编解码器以在 txt 文件中写入 unicode
- 从文件描述符实例化套接字对象的非侵入性方法
- 对在头文件中实例化指针感到困惑
- 如何根据对象文件中缺少的符号实例化模板
- 头文件中的模板实例化
- C++ 使用单个输入字节文件的不同部分实例化堆栈上的成员类
- 是否有任何方法可以避免cpp文件中所有方法的重复类实例化
- 如何重定向头文件(到库)以在实例化中包含一些代码
- 使用头文件实例化和使用 c++ 类