C ++中的空尖括号

MOOH

探索RxCpp库时,遇到了以下无法解释的示例。

    auto ints = rxcpp::observable<>::create(
        [](rxcpp::subscriber<int> s){
            s.on_next(1);
            s.on_next(2);
            s.on_completed();
    });

库中有两个observable声明

template<class T, class SourceOperator>
class observable
    : public observable_base<T>
{
// ...
};

template<>
class observable<void, void>
{
// ...
};

我无法理解的是编译器如何设法接受rxcpp::observable<>.片段。除了以外,可能还有许多observable针对不同类型的显式专业化工具void,void

问题是编译器如何解释此代码中的空尖括号: rxcpp::observable<>.

我在observable类中没有看到默认的模板参数,也没有可以解释这一点的可变参数模板参数。

然后我认为它与显式模板专业化有某种联系,并尝试在一个隔离的程序中重现它,例如这样

namespace isolated {
  template<class T>
  class Test {
  public:
    static void say() {
      cout << "I am generic" << endl;
    }
  };

  template<>
  class Test<int> {
  public:
    static void say() {
      cout << "I am integer" << endl;
    }
  };
}

int main() {
  isolated::Test<>::say(); // ERROR: too few arguments for class template.....
}

但是,即使只有一个显式的专业化,它也不会编译。

内森·奥利弗

你所缺少的是

template<
     class T = void,
     class SourceObservable = typename std::conditional<std::is_same<T, void>::value,
         void, dynamic_observable<T>>::type>
 class observable;

来自rx-predef.hpp的142-146行

该前向声明为observable该类提供默认模板参数,并允许您编写observable<>将使用这些默认值的模板参数在您的示例中,可以通过添加

template<class T = int>
class Test;

这给你

namespace isolated {
  template<class T = int>
  class Test;

  template<class T>
  class Test {
  public:
    static void say() {
      cout << "I am generic" << endl;
    }
  };

  template<>
  class Test<int> {
  public:
    static void say() {
      cout << "I am integer" << endl;
    }
  };
}

int main() {
  isolated::Test<>::say(); // ERROR: too few arguments for class template.....
}

和输出

I am integer

在这个现场的例子中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

返回模板类的函数中的C ++空尖括号

来自分类Dev

C#XML注释中的尖括号

来自分类Dev

C ++模板:尖括号中的类型名和|| s

来自分类Dev

模板定义中的空尖括号

来自分类Dev

ASP.NET C#MVC4中的双尖括号

来自分类Dev

Java中的方括号和尖括号

来自分类Dev

通过尖括号中的 id 获取元素

来自分类Dev

C ++ 17调用不带尖括号的模板类的静态方法

来自分类Dev

在Mac上如何使用尖括号将C库安装为<mylib.h>

来自分类Dev

括号中的变量C ++

来自分类Dev

C中的多余括号

来自分类Dev

括号中的变量C ++

来自分类Dev

定义中尖括号中的类名的目的是什么?

来自分类Dev

在狮身人面像中替换尖括号

来自分类Dev

google-code-prettify删除尖括号中的文本

来自分类Dev

正则表达式替换中的Perl尖括号

来自分类Dev

用dict括在尖括号中的功能参考

来自分类Dev

在包含尖括号的工作目录中执行Powershell

来自分类Dev

在Kali Linux中无法键入右尖括号

来自分类Dev

angular.copy()在尖括号{{}}中不起作用

来自分类Dev

尖括号内的指针?

来自分类Dev

#在花括号中定义C

来自分类Dev

用于c中的循环括号

来自分类Dev

C中的堆栈括号匹配

来自分类Dev

用于c中的循环括号

来自分类Dev

如何在C ++中使用C空括号函数?

来自分类Dev

如何在C ++中使用C空括号函数?

来自分类Dev

在链接周围添加尖括号

来自分类Dev

C ++插入空向量不能使用花括号