你的目标到底是什么?可以将变量传递给函数吗?如果不是,该函数如何知道要使用什么类型?如果您可以将变量传递给函数,则可以使用模板:
template<typename T>
T foo(T) {
return 4.3f;
}
现在你可以这样称呼它
std::cout << foo(a) << std::endl;
这里的变量仅用于获取其类型。如果你不想传入变量,那么你需要直接提供类型,例如
template<typename T>
T foo() {
return 4.3f;
}
std::cout << foo<decltype(a)>() << std::endl;
但这当然是非常丑陋的。
现在,如果您愿意使用宏,您可以稍微简化一下:
template<typename T>
T _foo() {
return 4.3f;
}
#define foo() _foo<decltype(a)>()
std::cout << foo() << endl;
但是当你调用 foo() 时,这当然会硬编码必须在范围内的变量的名称。
这里的根本问题是函数不能隐式使用变量的类型,因为函数是首先声明的。因此,如果模板不是一个好的解决方案,那么唯一的选择就是在函数和变量都可以访问它的地方声明类型。这可以通过以下方式完成typedef
:
typedef float atype;
atype foo() {
return 4.3f;
}
int main() {
atype a = 5.5f;
std::cout << foo() << std::endl;
}
或者,您可以简单地决定将返回值foo()
视为所讨论类型的权限:
float foo() {
return 4.3f;
}
int main() {
decltype(foo()) a = 5.5f;
std::cout << foo() << std::endl;
}