【问题标题】:Return class ref from class template function从类模板函数返回类 ref
【发布时间】:2016-09-29 14:16:00
【问题描述】:

给定一个类模板:

template <typename T>
class my_class
{
public:
    my_class& test1() { return *this; }
    // OR
    my_class<T>& test2() { return *this; }
}

test1test2的返回类型有区别吗?

【问题讨论】:

  • 不,没有区别
  • 没有。 (土豆)

标签: c++ templates


【解决方案1】:

test1test2的返回类型有区别吗?

没有。有一个概念叫做injected-class-name。在my_class&lt;T&gt; 的主体中,名称my_class 指的是完整类型my_class&lt;T&gt;

我们甚至可以得出合乎逻辑的结论并补充:

my_class::my_class::my_class::my_class& test4() { return *this; }

【讨论】:

  • 需要更多my_class
  • 注入的类名在c++03和c++11中的行为不同,你能补充一下吗?
  • @Trevir 我不知道 C++11 的变化。
  • 在 c++11 中,可以将注入的类名用作模板模板参数的模板参数。这在 c++03 中是不可能的。
【解决方案2】:

不,在my_class&lt;T&gt;范围内,my_classmy_class&lt;T&gt;的缩写。

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多