什么类型的c类型?

时间:2010-12-21 22:03:33

标签: c++ c types

我想知道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 ++中的类型是什么。任何帮助将不胜感激。

4 个答案:

答案 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)。)

希望你不需要走这条路。