1

我有一个模板结构:

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?

这种结构“class, typename”的学名是什么?我搜索了很多(“未命名的模板参数”等),但我没有找到任何关于它的信息。我想,它类似于带有未命名参数的函数。我想读一些关于它的东西——来自 C++ 标准或其他来源,但我不知道必要的信息在哪里。

4

1 回答 1

5

您需要为定义命名参数。

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它来定义它。在这个线程中解释得很好。

于 2013-04-16T15:04:03.900 回答