最近在研究asio网络库,在里面遇到一个模板问题,不懂是怎么回事,请帮忙解释下。
template <typename Handler>
char (&one_arg_handler_test(Handler h, ...))[2];
最近在研究asio网络库,在里面遇到一个模板问题,不懂是怎么回事,请帮忙解释下。
template <typename Handler>
char (&one_arg_handler_test(Handler h, ...))[2];
跟同事一起整明白了,分享下
// $ g++ -g -std=c++17 main.cpp -o main
#include <iostream>
#include <type_traits>
// one_arg_handler_test等价f
template <typename Handler>
char (&one_arg_handler_test(Handler h, ...))[2];
// 简单
typedef char char_array[2];
template <typename Handler>
char_array & f(Handler h,...);
// one_arg_handler_test2 等价 f2
char (&one_arg_handler_test2(...))[2];
// 简单
typedef char char_array[2];
char_array & f2(...);
int main()
{
std::cout << std::is_same_v<decltype(f<char>), decltype(one_arg_handler_test<char>)> << std::endl;
std::cout << std::is_same_v<decltype(f2), decltype(one_arg_handler_test2)> << std::endl;
return 0;
}
char (&one_arg_handler_test(Handler h, ...))[2];
这句里面的& 是 char (&)[2],语法表达的含义是 char [2]的引用类型