如何将类型名称传递给函数?

时间:2015-08-12 10:11:26

标签: c++ function typename

我的问题是我无法将类型名称传递给函数。 我真的不知道怎么做,所以我问自己是否有可能,但我想是的。

所以我想创建一个接受类型名称的函数,比如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(),在声明中放入什么使其接受类型名称?

感谢您阅读并帮助我。

1 个答案:

答案 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>()<>之间的差异向读者显示,在运行时和编译时评估代码。