如何将变量类型传递给函数?就像这样:
void foo(type){ cout << sizeof(type); }
1aaf6o9v1#
你不能像那样传递类型,因为类型不是对象。它们在运行时不存在。相反,你需要一个模板,它允许你在编译时示例化不同类型的函数:
template <typename T> void foo() { cout << sizeof(T); }
你可以用foo<int>()来调用这个函数。它将示例化一个版本的函数,其中T替换为int。查看function templates
foo<int>()
T
int
qltillow2#
正如Joseph曼斯菲尔德指出的那样,函数模板将做你想做的事情。在某些情况下,向函数添加一个参数可能是有意义的,这样你就不必显式指定模板参数:
template <typename T> void foo(T) { cout << sizeof(T); }
这允许您将函数调用为foo(x),其中x是T类型的变量。无参数版本必须称为foo<T>()。
foo(x)
x
foo<T>()
hfyxw5xn3#
有点晚-但它可以使用宏来实现-像这样:
#define foo(T) std::cout << sizeof(T) ... foo(MyType);
yc0p9oo04#
你可以这样做:
#include <typeinfo> template<class input> void GetType(input inp){ auto argumentType = typeid(inp).name(); }
这似乎不是你想要的,但它可能会有所帮助。
4条答案
按热度按时间1aaf6o9v1#
你不能像那样传递类型,因为类型不是对象。它们在运行时不存在。相反,你需要一个模板,它允许你在编译时示例化不同类型的函数:
你可以用
foo<int>()
来调用这个函数。它将示例化一个版本的函数,其中T
替换为int
。查看function templatesqltillow2#
正如Joseph曼斯菲尔德指出的那样,函数模板将做你想做的事情。在某些情况下,向函数添加一个参数可能是有意义的,这样你就不必显式指定模板参数:
这允许您将函数调用为
foo(x)
,其中x
是T类型的变量。无参数版本必须称为foo<T>()
。hfyxw5xn3#
有点晚-但它可以使用宏来实现-像这样:
yc0p9oo04#
你可以这样做:
这似乎不是你想要的,但它可能会有所帮助。