我的问题是我无法将类型名称传递给函数。 我真的不知道该怎么做,所以我问自己这是否可能,但我想是的。
所以我想创建一个像 sizeof() 那样接受类型名称的函数。
sizeof(int); // accepts a type name not a var
我试图实现这一点的代码如下所示:
#include "stdafx.h"
using namespace std;
void foo( WHAT TO PUT HERE? ) {...};
int main(){
foo(float);
return EXIT_SUCCES;
}
基本上我的问题是我不知道如何让函数 foo 接受像 sizeof() 这样的类型名称,要在声明中放入什么才能使其接受类型名称?
感谢您阅读和帮助我。
最佳答案
首先sizeof
不是函数,而是运算符(仅在编译期间处理),您不能创建自己的运算符。
您可能需要的是“元函数”- 模板。
template <typename T>
void foo() { ... /* Use T as type, ex. sizeof(T) */ ... }
并称它为:foo<MyType>()
请记住 - 所有模板参数等都在编译时解析,在 C++ 中无法在运行时传递类型(至少任何类型)
返回类型可以指定为模板参数 ( T foo()
),派生自 T ( typename T::return_type foo()
) - 如果您正确准备 T,或者您可以为您需要的类型提供模板特化 ( template <> float foo<int>()
以返回 float 用于 foo<int>
电话)
如果您确实需要,您可以创建宏来隐藏模板#define fooCall(X) foo<X>()
.但请 - 不要这样做,代码应该清楚地说明它做了什么以及何时它会这样做。 <>
之间的区别和 ()
向读者展示代码何时在运行时和编译时求值。
关于c++ - 如何将类型名称传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31962196/