我有一个模板结构:
template<typename T2, class, typename, class T3 = vec1<T2> >
struct vec2
{
template<typename D2, class, typename, class D3>
void f14(int a);
template<typename D2, class, typename, class D3>
void f15(int a);
};
我想定义,例如函数 f15。我不知道,我应该在“??”的地方写什么。我试图以不同的方式解决这个问题。但是编译器扼杀了我编译程序的梦想。
template<typename T2, class , typename , class T3>
template<typename D2, class , typename , class D3>
void vec2<T2,??,??,T3>::f15(int a) { }
我应该如何定义函数f15?
这种结构“类,类型名”的学名是什么? 我在谷歌上搜索了很多(“未命名的模板参数”等),但我没有找到任何相关信息。我猜,它类似于带有未命名参数的函数。我想阅读有关它的一些内容 - 来自 C++ 标准或其他来源,但我不知道必要的信息在哪里。
最佳答案
您需要为定义的参数命名。
template <typename T2, class X, typename Y, class T3>
template <typename D2, class X2, typename Y2, class D3>
void vec2<T2, X, Y, T3>::f15<D2, X2, Y2, D3>(int a) { }
一般来说,使用typename
和class
来定义参数列表中的类型并没有真正的区别。唯一的区别是,当您定义模板-模板参数时,您必须使用 class
。
template <template <typename> class> struct A {};
// ^^^^^ class is required here
此外,当您使用依赖类型(从模板参数派生的类型)时,您必须使用typename
来定义它。在this thread中解释得很好.
关于c++ - 如何定义声明的函数 - 具有未命名模板参数的模板结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16040439/