【问题标题】:C++11 What does this line of code do?C++11 这行代码是做什么的?
【发布时间】:2014-03-03 22:32:27
【问题描述】:

我正在浏览 Nano-signal-slot 源代码,希望它可以帮助我使用 C++11 在我的应用程序中实现信号和插槽功能,但我发现了一部分我以前从未见过的代码。

部分代码:

/* ... */

template <typename Re_t> class function;
template <typename Re_t, typename... Args>
class function<Re_t(Args...)>
{
    void *m_this_ptr;
    Re_t(*m_stub_ptr)(void*, Args...);

/* ... */

更具体地说:

class function<Re_t(Args...)>

类名后面有什么作用?

【问题讨论】:

  • 这是一个可变参数模板,注意 ... 运算符(多个模板参数)
  • 它允许您指定函数类型的参数类型(我假设您指的是(Args...) 部分)。顺便说一句,题外话,你为什么不看看Qt,它内置了一个简单而广泛(和线程安全)的信号/插槽机制。
  • 称它为可变参数模板对吗?我会说这是非可变参数模板的可变参数模板特化。
  • 这段代码包含一个类模板forward-declarationtemplate &lt;typename Re_t&gt; class function;和随后的部分特化说类模板:template &lt;typename Re_t, typename... Args&gt; class function&lt;Re_t(Args...)&gt; { /*...*/ };(使用这些术语来查找更多信息。)

标签: c++ c++11


【解决方案1】:

class function&lt;Re_t(Args...)&gt; 定义了模板类function&lt;T&gt; 的部分特化。基本上,这允许您以仿函数的形式编写特化,例如:

function&lt;int(double,unsigned)&gt; foo = ...

请注意,由于使用Args...,您可以拥有可变数量的参数。

【讨论】:

  • 谢谢 :) 我不确定 在类名之后做了什么。
猜你喜欢
  • 1970-01-01
  • 2015-12-23
  • 2015-01-14
  • 2019-02-27
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多