【发布时间】:2014-01-24 17:45:06
【问题描述】:
阅读了很多关于模板、模板特化和部分特化的文章,我仍然无法理解以下模板巫术的工作原理和原因。
template <class T> class Signal;
template <class Arg, class Ret>
class Signal<Ret (Arg)> {
typedef std::function<Ret (Arg)> Callback;
};
int main() {
Signal<void (int x)> signal;
}
我对代码的作用以及如何使用它有相当好的了解,但我只是不明白为什么以及如何使用它。编译器如何解释包含空格和括号的特化参数,例如class Signal<Ret (Arg)>? void (int x) 如何/为什么与专业化 class Signal<Ret (Arg)> 匹配?为什么template <class Arg, class Ret> 甚至是必要的?为什么不像在“普通”专业中那样使用<>? class Arg 和 class Ret 的顺序似乎无关紧要,为什么?
如果这些问题没有任何意义,我很抱歉。如果他们不这样做,请不要费心直接回答他们。我只想了解上述代码的工作原理和原因。谢谢。
【问题讨论】: