"和 "template template "有什么区别-6ren"> "和 "template template "有什么区别-因为我喜欢分离接口(interface)和实现,而不是只在头文件中实现模板类,我将它分成 .h 和 .tpp(.tpp 这样它就不会用 *.cpp 编译)。然后我将 tpp 包含在头文件的末尾,就在 -6ren">
gpt4 book ai didi

c++ - "template "和 "template template "有什么区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:31 28 4
gpt4 key购买 nike

因为我喜欢分离接口(interface)和实现,而不是只在头文件中实现模板类,我将它分成 .h 和 .tpp(.tpp 这样它就不会用 *.cpp 编译)。然后我将 tpp 包含在头文件的末尾,就在 #endif 之前。在头球后卫。由于这个选择,在实现 (.tpp) 中,要定义一个函数,我必须通过其模板参数引用它来定义每个函数,如下所示:

template <class T>
T MyTemplate<T>::functionName(T t){...}

但是,我注意到在定义带有额外模板参数的成员函数时,我必须使用以下方法引用它来定义它:

template <class T>
template <class C>
T MyTemplate<T>::extraTParamFunc(T t, C c){...}

代替:

template <class T, class C>
T MyTemplate<T>::extraTParamFunc(T t, C c){...} //no declaration matches 'T MyTemplate<T>::extraTParamFunc(T, C)'

这让我很困惑。那么这是为什么呢? template <class T, class C> 之间有什么区别?和 template <class T> template <class C>

此外,这里是 .h 和 .tpp 的示例,以防万一这具有任何相关性:

//MyTemplate.h
#ifndef MYTEMPLATE_H
#define MYTEMPLATE_H

template <class T>
class MyTemplate {

template <class C>
T extraTParamFunc(T t, C c);
...
}

#include "MyTemplate.tpp"
#endif //MYTEMPLATE_H

//MyTemplate.tpp
#include "MyTemplate.h"

template <class T>
template <class C>
T MyTemplate<T>::extraTParamFunc(T t, C c){...}

...

最佳答案

原则上可以在你的头文件中看到答案:

template <class T>
class MyTemplate {

template <class C>
T extraTParamFunc(T t, C c);
...
}

类(class)MyTemplate是一个模板。在这个模板中,您定义了另一个模板,函数 MyTemplate::extraTParamFunc .此外,如果您使用模板参数编写完整的函数名称,您可以看到:MyTemplate<T>::extraTParamFunc<C>() .这与MyTemplate<T,C>::extraTParamFunc()不同或 MyTemplate::extraTParamFunc<T,C>()会是。

所以你在模板中有一个模板,语法需要反射(reflect)这一点。如果您进行模板特化,特别是部分特化,或者如果您有可选的模板参数,如果 C++ 允许您将两个模板组合在一个单一的 template<> 中,那么语法将是模棱两可的。行。

关于c++ - "template <class T, class C>"和 "template <class T> template <class C>"有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55062465/

28 4 0