📜  获取函数返回类型打字稿(1)

📅  最后修改于: 2023-12-03 15:41:27.511000             🧑  作者: Mango

获取函数返回类型打字稿

有时候在编写代码过程中,我们需要获取一个函数的返回类型。这在模板编程或者一些复杂的泛型算法中非常有用。

下面我们将介绍C++中获取函数返回类型的多种方法。

decltype(auto)

C++11引入了 decltype 关键字,可以用来推导表达式的类型。同时,还有一种比较特殊的用法 decltype(auto) 可以推导一个变量或者表达式的类型,并且会保持原来的引用/值特性。

这里我们可以使用 decltype(auto) 来获取函数的返回类型:

auto foo() -> int& {
    static int x = 10;
    return x;
}

int main() {
    decltype(auto) result = foo(); // result类型为int&
    return 0;
}
std::result_of

C++11中提供了 std::result_of 模板,用来获取一个函数调用后的返回类型。需要注意的是,std::result_of 要求函数必须是可调用的类型(可以是函数指针、函数对象、成员函数指针等)。

struct Foo {
    int operator()() const { return 0; }
};

int bar() { return 0; }

int main() {
    std::result_of<Foo()>::type result1 = 0; // result1类型为int
    std::result_of<decltype(bar)&()>::type result2 = 0; // result2类型为int
    return 0;
}
C++14的decltype(auto)

在C++14中,我们还可以使用 decltype(auto) 来获取一个表达式的类型,并会保持原有的引用/值特性。这里我们可以将函数调用作为这个表达式:

auto foo() -> int& {
    static int x = 10;
    return x;
}

int main() {
    decltype(auto) result = foo(); // result类型为int&
    return 0;
}
总结

我们介绍了C++中获取函数返回类型的三种方法,包括C++11的 decltype(auto)std::result_of,以及C++14新增的简化了的 decltype(auto)

这些方法都可以在泛型编程和元编程中非常有用,有助于我们解决更多的编程难题。