gpt4 book ai didi

c++ - 确定模板函数的返回类型

转载 作者:太空狗 更新时间:2023-10-29 21:32:38 24 4
gpt4 key购买 nike

鉴于我有一个由模板参数确定的返回类型,如下所示:

template <typename T>
conditional_t<is_same_v<T, int>, int, char> foo(const T&);

我认为我可以使用 decltype(foo<float>)获得这种类型,但它似乎不起作用。

我没有 所以我不能使用 invoke_result_t .

最佳答案

I thought that I could use decltype(foo<float>) to get this type but it doesn't seem to be working.

表达式foo<float>指的是函数,所以 decltype将与模板函数的类型相关(即 char (const float&) )。


您正在寻找的是:

decltype(foo(std::declval<float>()))

即函数foo返回的表达式当 float作为输入给出。

当然,您可以用 float 代替与任何类型以获得模板函数的不同结果。


示例代码:

#include <type_traits>
#include <utility>

// Your template function
template <typename T>
std::conditional_t<std::is_same_v<T, int>, int, char> foo(const T&);

void test() {
decltype(foo(std::declval<float>())) x; // x is char in this case

// We can test the type of x at compile time

static_assert(!std::is_same_v<decltype(x), int>, "error"); // x is not an int
static_assert(std::is_same_v<decltype(x), char>, "error"); // x is a char
}

关于c++ - 确定模板函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336001/

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