如何从 C++ 函数返回一个类型?

Gha*_*ani 1 c++ templates function return-type

我正在阅读C++ Templates: The Complete Guide, 2th Edition,我看到了这个代码:

template<typename T1, typename T2>
std::common_type_t<T1, T2> max (T1 a, T2 b)
{
    return b < a ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

根据我从第 12 页读到的内容,我想问一下函数如何计算它想要返回的类型?在上面的例子中,max函数如何计算它想要返回的类型,在 T1 和 T2 之间选择?

我查看了 : ./gcc/libstdc++-v3/include/std/type_traits2115但无法弄清楚发生了什么。

我想要做什么:
我有很多typedef像这样的ed 函数指针:

typedef void (*voidVoid)();
typedef void (*voidInt)(int);
typedef void (*voidDouble)(double);
...
Run Code Online (Sandbox Code Playgroud)

我想做一个像这样的功能:

Type getFunctionPointer(const std::string& name);
Run Code Online (Sandbox Code Playgroud)

其中取函数指针的名称并返回相应的函数指针。在我找到templates之前,我认为这是不可能的。但我认为,std::commone_type_t正是在做我想做的事情。它接受一个变量并返回一个类型(这是该变量的类型)。

我该如何定义?我可以使用std::commone_type_t或更好的解决方案来实现它templates吗?

use*_*751 5

你的问题没有意义。这个功能:

template<typename T1, typename T2>
std::common_type_t<T1, T2> max (T1 a, T2 b)
{
    return b < a ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

不返回类型std::common_type_t<T1, T2>。它返回一个值(a 或 b),该值的类型是std::common_type_t<T1, T2>

同样,这个函数:

int max2 (int a, int b)
{
    return b < a ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

返回 type 的值int,但不返回类型int本身。

如果要编写一个返回其他类型值的函数,例如std::string,请将其写在函数名之前:

vvvvvvvvvvv here
std::string return_a_string ()
{
    return "hello";
}
Run Code Online (Sandbox Code Playgroud)