C++ c+的含义+;仅使用typedef的结构语法

C++ c+的含义+;仅使用typedef的结构语法,c++,struct,syntax,typedef,C++,Struct,Syntax,Typedef,当我检查一些库中的一些代码片段时,我看到了如下代码: template<typename _Function, typename _ReturnType> struct _TaskOfType_ContinuationTypeTraits { typedef task<typename _TaskTypeTraits<typename _FunctionTypeTraits<_Function, _ReturnType>::_FuncRetType&g

当我检查一些库中的一些代码片段时,我看到了如下代码:

template<typename _Function, typename _ReturnType>
struct _TaskOfType_ContinuationTypeTraits
{
    typedef task<typename _TaskTypeTraits<typename _FunctionTypeTraits<_Function, _ReturnType>::_FuncRetType>::_TaskRetType> _TaskOfType;
};
模板
结构任务类型继续类型特征
{
typedef任务_TaskOfType;
};

有人能解释一下代码吗?它试图做什么?在主体中只使用typedef语句的结构有什么好处?

这种语法用于创建“模板化typedef”。在C++11及更高版本中,应改为使用

您发布的代码片段的目的是创建一个依赖于
\u函数
\u ReturnType
的类型别名

可以这样访问它:

typename _TaskOfType_ContinuationTypeTraits<F, R>::_TaskOfType
typename\u TaskOfType\u ContinuationTypeTraits::\u TaskOfType

如果您可以访问C++11,这是一个更干净、更好、更直观的解决方案:

template<typename _Function, typename _ReturnType>
using _TaskOfType = 
    task<typename _TaskTypeTraits<
        typename _FunctionTypeTraits<_Function, _ReturnType>::_FuncRetType>::_TaskRetType>
模板
使用_TaskOfType=
任务::_TaskRetType>
可以这样使用:

_TaskOfType<F, R>
\u任务类型

在C++语句中,<>代码> TaskfType连续型特征是元功能。它在编译时进行类型计算

元函数在某种程度上类似于运行时函数。关键区别在于,元函数的输入参数是类型,返回值也是类型

下面的元函数接受一个类型,并返回您提供给它的类型的指针

template <typename T>
struct add_pointer
{
    typedef T* type;
}
模板
结构添加指针
{
类型定义T*类型;
}
现在,如果您添加了指针::type,它将返回
int*
。你看,你给了它一个类型(
int
,在本例中),编译器计算了一个新类型(
int*
,在本例中),并在调用元函数的
::type
时将其返回给你。在元函数上执行
::键入
,即在实例化模板时。这是调用函数的运行时等价物。还要注意,所有这些都发生在编译时


现在,回到您的
\u任务类型\u ContinuationTypeTraits
。这就像我的
add\u指针一样。在
add_pointer
中,我只有一个模板参数,您有两个。我刚刚添加了一个指向所提供类型的指针,您有更复杂的东西。但是,本质上,它只是一种类型计算。我的
add_指针
在我调用
时返回:type
,而你的指针在调用
时返回::\u TaskOfType

你可能会发现查找模板元编程很有帮助。很好!现在它有肉了+1我认为你的回答更能说明这种语法的目的(优点)。你的例子更容易理解,也更有意义。最终,它正在计算类型。但是@Vittorio Romeo的回答也有道理。