【发布时间】: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-declaration:
template <typename Re_t> class function;和随后的部分特化说类模板:template <typename Re_t, typename... Args> class function<Re_t(Args...)> { /*...*/ };(使用这些术语来查找更多信息。)