c++ - 嵌套类中的类实例化

标签 c++ templates c++14 variadic-templates

我有以下问题:

template< typename T, size_t N, size_t... N_i >
struct A
{
  // nested class
  template< typename... Ts >
  class B
  {
      //...

      A<T, N_i...>::B< Ts... > operator[]( size_t i )
      {
        A< T, N_i...>::B< Ts... > res{ /* ... */ };

        return res;
      }

      // ...
  };
};

不幸的是,编译器产生“A < T, N_i...>::B < Ts... > res{ /* ... */ }; ”错误。有谁知道我如何返回 class B 的实例(其外部 class A 的模板参数不同)在 operator[] 的函数“class B ”中?

提前非常感谢。

最佳答案

添加 typename 就足够了之前A<T, N_i...>和一个 template之前B< Ts... > .

我是说

template< typename T, size_t N, size_t... N_i >
struct A
{
  // nested class
  template< typename... Ts >
  class B
  {
      //...

      typename A<T, N_i...>::template B< Ts... > operator[]( size_t i )
      {
        typename A< T, N_i...>::template B< Ts... > res{ /* ... */ };

        return res;
      }

      // ...
  };
}

P.s.:也应该适用于 C++11;不仅仅是 C++14

关于c++ - 嵌套类中的类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065561/

相关文章:

c++ - 无法为进程中的所有线程安装 Hook

c++ - 快速稀疏矩阵乘法

c++ - shared_ptr 的静态成员函数 make_shared

c++ - 将容器视为一个容器

c++ - 使用 lambda 作为 GLFWkeyfun

c++ - 使用 TextMate 构建 C++11?

templates - Genshi 嵌套匹配模板

c++ - 选择成员函数而不是成员函数定义中具有相同名称的函数

c++ - typedef 一个模板类而不指定模板参数

c++ - 无法使用 ostream << 重载 stringstream 参数 1 没有已知的转换