我有这个:
//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..
}
并使用预处理程序指令选择其中一个。 (这是无关紧要的,只是为了表明这个例子不仅仅是愚蠢的)。
答案 0 :(得分:1)
为什么不能在之前输入typedef。如果声明函数具有给定自定义类型的参数(可以是class或typedef),则还需要以某种方式声明此类。
与指向类/结构的指针一样,即使类成员未知(= sizeof(指针)),大小也是众所周知的,如果是typedef类型,除非你不知道大小提供完整的typedef声明。
因此,解决方案是在函数声明之前放置typedef
。
你应该:
// declarations
typedef void* Foo; //Foo is defined later as void*
void doSome(Foo foo);
// definitions
void doSome(Foo foo)
{
//code here..
}
如果由于某种原因无法修改定义,可以重复两次typedef(只要两者都不冲突/完全相同):
// declarations
typedef void* Foo;
void doSome(Foo foo);
// definitions
typedef void* Foo;
void doSome(Foo foo)
{
//code here..
}
编辑问题后编辑
最好的方法是重载功能:
void doSome(void* foo)
{
// void* version
}
void doSome(int* foo)
{
// int* version
}
在项目周围使用不同的Foo
不是一个好主意。
答案 1 :(得分:0)
typedef void* Foo;
void doSome(Foo foo);
void doSome(Foo foo)
{
//code here..
}
您只需要向前声明具有实现的类。 Typedef没有实现。