【发布时间】:2014-04-13 01:24:27
【问题描述】:
decltype 如果您调用它的函数被重载,则会失败,如下代码所示:
#include <iostream>
int test(double x, double y);
double test(int x, int y);
char test(char x, int y);
int main()
{
std::cout << decltype(test) << std::endl;
return 0;
}
结果:
error: decltype cannot resolve address of overloaded function
我知道这是因为decltype 无法确定您要获取的函数类型。但是为什么没有其他方法可以使这项工作,像这样:
std::cout << decltype(test(double, double)) << std::endl;
或者这个:
double x = 5, y = 2;
std::cout << decltype(test(x, y)) << std::endl;
由于函数不能仅仅基于返回类型进行重载,将数据类型或实际变量传递给decltype 调用是否足以告诉它应该检查哪些重载?我在这里错过了什么?
【问题讨论】:
-
我不确定你想通过输出一个类型来完成什么,但你的最后一段代码除此之外还能工作。
-
@chris 这是一段测试代码。使用
decltype的真实代码位在我给它重载函数时失败,我试图查明问题。 -
你是要查找返回类型还是实际函数的类型?
-
@chris 我很确定代码正在获取函数的类型。代码本身实际上是在一个模板库中,超出了我的技能水平,但它似乎正在获取模板函数的类型。
-
如果我错了,请纠正我,但我似乎记得
decltype通常与declval一起使用,以将declval参数传递给函数以返回类型。
标签: c++ c++11 overloading decltype