#pragma 模板功能的链接
#pragma link for template function
我使用 cling 并希望看到我的模板在环境中运行,因此在加载 (.L( 的类我希望能够调用我的模板函数。
我可以为这样的模板执行此操作:
template <typename T>
static void ObjectApplyStyle(const char* styleName, T *cObj, Int_t objNum=0, Int_t verbose=0);
对于这样的函数,我在 LinkDef.h 文件中添加了下一个字符串:
#pragma link C++ function AliDrawStyle::ObjectApplyStyle(const char*, TGraph *, Int_t, Int_t);
#pragma link C++ function AliDrawStyle::ObjectApplyStyle(const char*, TH1 *, Int_t, Int_t);
#pragma link C++ function AliDrawStyle::ObjectApplyStyle(const char*, TF1 *, Int_t, Int_t);
所以我的问题是我怎么能做同样的事情,但对于这样的模板功能?
template <typename T>
static T PrepareValue(const char* styleName, TString propertyName, TString elementID, TString classID, TString objectID, TString localStyle, Bool_t &status, Int_t objNum=0, Int_t verbose=0);
如果我要在 LinkDef.h 中添加此字符串:
#pragma link C++ function <Int_t> AliDrawStyle::PrepareValue(const char*, TString, TString, TString, TString, TString, Bool_t &, Int_t, Int_t);
#pragma link C++ function <Float_t> AliDrawStyle::PrepareValue(const char*, TString, TString, TString, TString, TString, Bool_t &, Int_t, Int_t);
编译器给我警告"找不到 func"。
正如你在这里看到的,我的模板函数之间的区别 - 第一个在参数中包含 T 类型,但第二个具有相同的参数列表,并且具有不同类型的返回值。
你有什么想法吗?
除了与阿克塞尔的讨论:
让我们看看例子:
MyClass.h
class MyClass {
public:
template <typename T>
static T Ex1();
template <typename T>
static T Ex2();
};
MyClass.cxx
#include "MyClass.h"
template <typename T>
T MyClass::Ex1(){
}
template <typename T>
T MyClass::Ex2(){
}
这是我在root6中看到的:
root [0] #include "MyClass.h"
root [1] MyClass::
MyClass
operator=
~MyClass
root [1] MyClass::
和.L
root [0] .L MyClass.cxx+
root [1] MyClass::
MyClass
operator=
~MyClass
root [1] MyClass::
但是如果我为一个函数添加显式调用: MyClass.cxx
#include "MyClass.h"
template <typename T>
T MyClass::Ex1(){
// here I added calling of template function
MyClass::Ex2<float>();
}
template <typename T>
T MyClass::Ex2(){
}
我将开始看到:
root [0] .L MyClass.cxx+
root [1] MyClass::
Ex2<float>
MyClass
operator=
~MyClass
root [1] .q
但是如果我只使用包含,我无论如何都看不到我的函数:
root [0] #include "MyClass.h"
root [1] MyClass::
MyClass
operator=
~MyClass
谢谢!
无需将函数添加到 LinkDef.h 中。只需#include
标题(或.L
您的类(并调用它!如果失败,请发布错误消息。
相关文章:
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 当我链接两个静态C++库时,我可以在两个主函数库中有两个主要功能吗?
- "no main"用于C++中链接或执行的功能
- #pragma 模板功能的链接
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- 如何使用字符串更改此插入功能以在链接列表中工作
- 双链接列表插入功能C
- 当用作模板参数时,功能指针是否需要指向具有外部链接的函数
- 协和式飞机安装:需要链接一个lp求解器才能使用此功能
- 在C 中实现链接列表类的临界功能
- C 链接列表堆栈POP功能崩溃
- POP_FROND双重链接列表功能问题
- 链接列表中的搜索功能问题
- 使用模板独立enable_if时,链接器错误带有模板的朋友功能
- 在Linux上构建具有链接时代码生成功能的静态库的正确方法是什么
- 我的链接列表打印功能进入无限循环
- 该功能检测循环链接列表的时间复杂性是什么?
- cusparse功能的多个定义错误在链接可执行文件中的cuda文件时
- 语言链接只属于一个功能吗?
- 使用'this'指针的链接功能