此模板定义在 C++ 中是什么意思?

what does this template definition mean in c++?

本文关键字:是什么 意思 C++ 定义      更新时间:2023-10-16

我正在阅读一些c ++代码,下面的代码列表让我非常困惑。
我可以猜到它试图定义一个专门的模板,该模板试图使输入参数类型具有特征。但是我有几个问题:
第一个模板看起来既像派生又像模板专用化,如果是派生,结构如何从自身派生? 如果是模板专用化,模板定义在哪里?

template<typename F>
struct function_traits : public function_traits<decltype(&F::operator())>
{};
template<typename R, typename C, typename ... Args>
struct function_traits<R(C::*)(Args...) const> {
template<size_t i>
struct arg
{
using type = typename std::tuple_element<i, std::tuple<Args...>>::type;
};
};

第一个声明只是struct function_traits主模板的定义。请注意,模板的特定专用化派生自该模板的不同专用化(只要没有循环(没有问题。请记住,类模板的每个专用化都是不同的、不相关的类型。

第二个声明只是引入了函数类型的部分专用化,其实例化可能会用作主模板的基类(因为主模板派生自其模板参数为成员函数类型的专用化(。