在下面的代码中,<Result (Arg0, Arg1)>和有什么区别<Result, Arg0, Arg1>
#include <cstddef>
#include <iostream>
using namespace std;
template <typename Result, typename Arg0 = void, typename Arg1 = void>
class Signal;
template <typename Result, typename Arg0, typename Arg1>
class Signal<Result (Arg0, Arg1)> // is this the same as <Result, Arg0, Arg1>
{
Result test(Arg0 arg0, Arg1 arg1)
{
}
};
int main()
{
Signal<void (int, int)> s; // or Signal<void, int, int>?
}
Run Code Online (Sandbox Code Playgroud)
Result(Arg0, Arg1)是单一类型。这是读“功能回吐Arg0和Arg1返回Result”。当你专攻时Signal,
template <typename Result, typename Arg0, typename Arg1>
class Signal<Result(Arg0, Arg1)>
Run Code Online (Sandbox Code Playgroud)
您只给出了 1 个参数,但需要 3 个。其他 2 个成为默认值,如模板声明中所述。因此,这与
template <typename Result, typename Arg0, typename Arg1>
class Signal<Result(Arg0, Arg1), void, void>
Run Code Online (Sandbox Code Playgroud)
请注意,特化中的参数名称与声明匹配完全没有区别。将Arg0在专业化是从不同Arg0的声明。在专业化中,Arg0未指定 -from-the-declaration,这就是它默认为 的原因void。同样,在声明中
Signal<void(int, int)> s;
Run Code Online (Sandbox Code Playgroud)
你真的写了
Signal<void(int, int), void, void> s;
Run Code Online (Sandbox Code Playgroud)
我怀疑你打算做这些事情中的任何一件。只需使用逗号。