在C++引物中对函数指针类型使用auto或decltype

Using auto or decltype for Function Pointer Types in C++ primer

本文关键字:类型 auto decltype 指针 函数 C++      更新时间:2023-10-16

C++入门,6.7指向函数的指针对函数指针类型使用auto或decltype

如果我们知道要返回哪个函数,我们可以使用decltype来简化编写函数指针返回类型。例如,假设我们有两个函数,它们都返回一个字符串::size_type,并且有两个常量字符串&参数。我们可以编写第三个函数,它接受一个字符串参数,并返回一个指向这两个函数之一的指针,如下所示:

string::size_type sumLength(const string&, const string&);
string::size_type largerLength(const string&, const string&);
// depending on the value of its string parameter,
// getFcn returns a pointer to sumLength or to largerLength
decltype(sumLength) *getFcn(const string &);

我不明白"getFcn根据其字符串参数的值返回指向sumLengthlargerLength的指针";。如何知道指针函数返回指向sumLengthlargerLength的点?

这篇文章说你可以将getFcn定义为这样的

typedef decltype(sumLength) func_type;
func_type* getFcn(const string& s)
{
    if (s.size() < 1000) // magic number
        return sumLength;
    else
        return largerLength;
}

你可以称之为

string str1, str2;
// calls either sumLength or largerLength with str1, str2 
// depending on str1's size
auto i = getFcn(str1)(str1, str2);