我的问题是我无法将类型名称传递给函数。 我真的不知道怎么做,所以我问自己是否有可能,但我想是的。
所以我想创建一个接受类型名称的函数,比如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(),在声明中放入什么使其接受类型名称?
感谢您阅读并帮助我。
答案 0 :(得分:6)
首先,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,或者您可以为所需类型提供模板特化({{ 1}}返回template <> float foo<int>()
次调用的浮点数
如果真的需要,您可以创建宏来隐藏模板foo<int>
。但请 - 不要这样做,代码应清楚地说明它的作用,何时它。 #define fooCall(X) foo<X>()
和<>
之间的差异向读者显示,在运行时和编译时评估代码。