gpt4 book ai didi

c++ - 具有两个参数的模板与每个具有一个参数的模板的两个声明之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:39 26 4
gpt4 key购买 nike

接下来两个声明之间的区别是什么:

template<class T, class functor>
methodReturnType className::methodName(functor f)

和:

template<class T>
template<class functor>
methodReturnType className::methodName(functor f)

我试图编写一个可以与仿函数 arg 一起使用的方法。第二个声明允许我避免将整个类声明为 Tfunctor 的模板。我想要一个只有一个参数 T 的模板类 className,但在那个类中,一个方法有另一个参数 functor,但没有声明整个类作为两个参数的模板。它起作用了,但我没有完全理解它。

最佳答案

首先是类的一个(非模板)成员函数模板template< typename T, typename functor > class
className
.第二个是成员函数模板类模板 template <typename T> class className ,例如:

首先:

template <typename T, class Functor >
class ClassName
{
ReturnType functionName( Functor f );
};

第二个:

template <typename T>
class ClassName
{
template <typename Functor>
ReturnType functionName( Functor f );
};

你说你没看透,但你好像掌握了本质:在第二种情况下,类模板只有一个参数,但即使在实例化之后(类型定义 T ),成员函数仍然存在一个模板,可以在许多不同类型上实例化。因为它是一个函数模板,模板参数扣除适用,因此您不必指定类型;这当您调用功能。

关于c++ - 具有两个参数的模板与每个具有一个参数的模板的两个声明之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17521446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com