【发布时间】:2012-01-06 13:09:48
【问题描述】:
我有这个:
//forward declaration of Foo <-- this is my question
void doSome(Foo foo);
typedef void* Foo; //Foo is defined later as void*
void doSome(Foo foo)
{
//code here..
}
如何以与 void* 兼容的方式转发声明 Foo?
这是一个过于简单的例子,这里当然是微不足道的,但想法是有多个实现,像这样:
//forward declaration of Foo <-- this is my question
void doSome(Foo foo);
//[implementation1_internal.h]
typedef void* Foo; //Foo is defined later as void*
void doSome(Foo foo)
{
//code here..
}
//[implementation2_internal.h]
typedef int* Foo; //Foo is defined later as int*
void doSome(Foo foo)
{
//code here..
}
并使用预处理器指令选择其中之一。 (这无关紧要,只是为了表明示例不只是愚蠢)。
【问题讨论】:
-
为什么不能提前放typedef?
-
这是微不足道的可能(或将前向声明向下移动,同样的事情)。在定义
Foo之前,您实际上不能调用doSome(Foo)。 -
这只是一个例子。我将在多个头文件中对 Foo 和 doSome 进行多个声明
-
"这无关紧要,只是为了说明例子不傻" 其实我想说这个例子很傻——你为什么要颠覆像这样的类型系统?如果函数应该能够采用不同的指针类型,则将它们设为函数模板...
标签: c++ typedef forward-declaration