c++ - 如何定义声明的函数 - 具有未命名模板参数的模板结构成员?

标签 c++ templates

我有一个模板结构:

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) {  }

一般来说,使用typenameclass 来定义参数列表中的类型并没有真正的区别。唯一的区别是,当您定义模板-模板参数时,您必须使用 class

template <template <typename> class> struct A {};
//                            ^^^^^ class is required here

此外,当您使用依赖类型(从模板参数派生的类型)时,您必须使用typename 来定义它。在this thread中解释得很好.

关于c++ - 如何定义声明的函数 - 具有未命名模板参数的模板结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16040439/

相关文章:

c++ - 如何创建一个包含其类型未知的值的类?

java - 在 NDK 上找不到 c++ 和 java 的实现

c++ - 在 C++ 中初始化二维数组

c++ - 重载赋值运算符不适用于链接

c++ - 用模板实现替换预处理器 #ifdef block

c++ - 是否可以省略 `std::forward` 中的模板参数?

c++ - 在 C++ 中创建带有结构的节点时出现段错误

c++ - 在 IInternetSecurityManager 中覆盖 GetSecurityId

c++ - 可变参数模板中更好的包扩展语法?

c++ - 为什么 C++ 编译器可以将函数声明为 constexpr,而不能是 constexpr?