我想知道c中有哪些类型。例如,我将如何做这样的事情。
type type_a = int;
type type_b = float;
在我的项目中,我正在尝试创建一个可以按如下方式使用的函数。
// createSelector(const char *name, ...)
Selector *mySelector = createSelector("myMethod", int, char);
// Selector->types contains all the passed types in an array.
// Selector->name contains the name of the method.
如果c不支持此功能,我可以轻松地将我的项目转移到c ++。但是,我需要知道c ++中的类型是什么。任何帮助将不胜感激。
答案 0 :(得分:17)
你无法在C或C ++中做到这一点。执行这种基于类型的内省的能力称为“反射”,它不是C或C ++中的特征。
老实说,如果你发现自己需要这样的东西,你需要对你的设计进行一次非常长时间的严格审视 - 需要这样的东西,即使是那些支持它们的语言通常也表明了对一个糟糕设计的论证
答案 1 :(得分:5)
C和C ++都不允许您直接使用类型。要做你想建议的事情类型,你需要调查templates,虽然你可能无法做到你想要的那种类型,但你可能能够相当接近
// template <typename T, typename T2>
// Selector* createSelector(const char* name)
Selector *mySelector = createSelector<int,char>("myMethod");
答案 2 :(得分:3)
除了@Billy ONeal的答案之外,我应该注意到,通过template metaprogramming
可以在C ++中进行编译时类型选择。答案 3 :(得分:2)
正如其他人所提到的,你不能直接引用没有反射的类型,这不是C或C ++中的一个特性。 C ++至少有模板,适用于许多通用算法。
但是要回答你关于C的问题,至少有一个图书馆试图为自己的需要提供这个。 Message-Passing Interface必须在许多不同的平台上发送和接收数据,其中数据类型可以是不同的大小。因此,MPI使用常量将数据类型指示为函数参数。例如:
char buffer [BUFFERSIZE];
MPI_Send (buffer, BUFFERSIZE, MPI_CHAR, ...); // MPI_CHAR indicates a char array
(值得注意的是Boost's MPI bindings不需要类型常量,只会有效地调用send(buffer)
。)
希望你不需要走这条路。