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

标签 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() 这样的类型名称,要在声明中放入什么才能使其接受类型名称?

感谢您阅读和帮助我。

最佳答案

首先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/

相关文章:

ios - 全局函数和 AppDelegate 类的 performSelector 错误

c++ - 调用将模板指针指向函数的模板函数

c++ - 为什么必须在何处以及为什么要放置"template"和"typename"关键字?

c++ - C++ 是否有类似 scala 的 mixin?

c++ - 为什么在 ctor 工作中将临时变量传递给 const ref?

function - 与函数组合混淆

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c++ - 如何将 SYSTEM header 与 CMake 和 clang-tidy 一起使用?

c++ - 从 CreateProcess 创建的进程中获取输出

javascript - 用括号调用JS函数