【问题标题】:Passing values to inner class via template arguments C++通过模板参数 C++ 将值传递给内部类
【发布时间】:2020-11-26 12:36:42
【问题描述】:

试图通过模板agrument将值传递给嵌套类,并且有一些混乱:

template<typename A,typename B>
class outter{
    int a;
    T* p;
    ////...////
    template<typename N=int> class inner;

    inner do_something(){
    return inner<a>(p)
    }
}

template<typename T,typename A, typename N=int>
class outter<T,A>::inner<N>{
    sz=N;
}

任务是为具有范围控制的向量创建迭代器。 现在我陷入了内部类模板声明和传递参数。请,如果可能的话,我需要提前。谢谢!

【问题讨论】:

  • 使用template&lt;typename N=int&gt; class inner,您声明N 是一个类型而不是一个值。除此之外,模板是一个纯粹的 compile.time 构造,您不能将任何运行时值(如普通变量)作为模板参数传递。

标签: c++ class templates


【解决方案1】:

对于内部类,你有template &lt;typename N&gt;,这意味着你的N 是一个类型,而不是一个值,因此,你不能将它分配给一个值。

要解决您的问题,请尝试使用template &lt;int N&gt; class inner; 并在底部template&lt;typename T, typename A, int N&gt; 以相同的方式进行修复

编辑

刚刚注意到,在底部你有内部类定义。你想要这个sz 是什么?它是值还是类型?如果你希望这是一个值,你应该写

template<typename T,typename A, int N> // this last int determines also the type to be used down below v
class outter<T,A>::inner<N>{
    int sz=N; // this int comes from the upper side ^
}

如果您希望sz 成为定义内部类中的大小的类型,则将上下部分保持为&lt;..., typename N = int&gt; 并将using 放在sz=N; 之前

template<typename T,typename A, typename N=int>
class outter<T,A>::inner<N>{
    using sz=N;
}

如果你想通过模板指定N的类型和值,请按照这个例子:

template </*outer template params*/>
class outer {
  template <typename SIZE_TYPE, SIZE_TYPE VALUE = SIZE_TYPE()>
  class inner;
};

template </*outer template params*/, typename SIZE_TYPE, SIZE_TYPE VALUE = SIZE_TYPE()>
class outer</*params*/>::inner<SIZE_TYPE, VALUE> {
  using size_type = SIZE_TYPE;
  size_type my_value = VALUE;
}

编辑 2

如果您想了解此处发生的情况,请阅读有关模板实例化的更多信息。

【讨论】:

  • 没有帮助。关键错误是:严重性代码描述项目文件字符串抑制状态错误C2992向量 ::迭代器:无效或缺少参数列表模板我现在的类声明是:template&lt;typename A,typename B&gt; class outter{ int a; T* p; ////...//// template&lt;int N&gt; class inner; inner do_something(){ return inner&lt;a&gt;(p) } } //outter declaration template&lt;typename T,typename A, int N&gt; class outter&lt;T,A&gt;::inner&lt;N&gt;{ sz=N; }
  • 感谢您的回复。我需要先。如果可能的话,只是尝试通过模板参数将值从外部类传递到内部类。是的,通过你的第一次编辑尝试,但仍然有像顶部这样的错误。当然,我可以通过构造函数参数传递值来实现我的案例,但是模板非常具有泛型,现在对我来说非常不重要。是否可以通过模板参数将值从外部类传递给内部类?
  • @c_thief 我认为这是另一个问题,您需要在另一篇文章中提问(如果在网上找不到答案)。另外,如果它确实解决了您的问题,请考虑接受答案。创建新帖子时,请指出我,我会尽力解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 2015-09-22
相关资源
最近更新 更多