我正在为项目编写一些测试函数。测试函数接受函数指针,期望值和测试值并检查它们:
int TestIntInIntOut(int (*func)(int val), int expected, int testvalue);
但是,我也在测试可以将枚举作为参数或退出值的函数。
假设以下内容:
typedef enum { Zero, One, Two } MyEnum;
有没有办法可以将整个枚举作为一种类型传递?对于任何枚举。例如:
int TestIntInEnumOut(?enum? (*func)(int val), ?enum? expected, int testvalue);
或
int TestEnumInIntOut(int (*func)(?enum? val), int expected, ?enum? testvalue);
(类似于C#中允许的泛型。)
答案 0 :(得分:4)
你的意思是任何枚举,还是MyEnum
?
如果您只需要支持MyEnum
的功能,则可以执行以下操作:
int TestEnumInIntOut(int (*func)(MyEnum val), int expected, MyEnum testvalue);
否则你可能无法在C中做到这一点,类型安全性很高。但是枚举与int基本相同,因此您可以将它们全部视为int
类型。如果需要类型安全性,请考虑为不同的枚举类型提供不同的整数值范围。
答案 1 :(得分:0)
不能直接回答您的问题,但正如您所说的那样,您正在编写一些测试功能:您可能希望查看googletest或cppunit - 可以省去一些麻烦。