gpt4 book ai didi

c++ - 在编译时获取函数名称?

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:40 26 4
gpt4 key购买 nike

我想做一个小而笨的测试框架。

在创建这个愚蠢的框架时,我想满足的一个要求是能够将任何以“TEST_”开头的函数添加到我的函数列表中,并为“SETUP_”和“TEARDOWN_”各添加一个函数。

例如:

TEST_MyFirstTest("My fake test"){
//... test code
}

SETUP_MyTest("setup before each test"){
//... create all objects to be handled here
}

int main() {
TESTFRAMEWORK Test = new TESTFRAMEWORK();
Test.run();
return 0;
}

显然我会在一个单独的文件中定义我的测试,但有没有办法做到这一点?我需要使用 TMP 吗?

最佳答案

如果您愿意将语法调整为:

TEST(MyFirstTest, "My Fake Test") {
// test code...
}

然后你可以这样做:

struct testBase {                                                     
virtual void run() = 0;
virtual const char* getDesc() = 0;
};

vector<testBase*> global_test_collection;

#define TEST(name,desc) \
struct test_##name : public testBase { \
virtual void run(); \
virtual const char* getDesc() { return desc; } \
static bool init; \
}; \
test_##name::init = global_test_collection.append(new test_##name()); \
void test_##name::run()

我还没有真正测试过这个。

您可以通过使用函数指针而不是虚函数来简化它,但是您会丢失描述并且可能会遇到执行顺序问题。

关于c++ - 在编译时获取函数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19124114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com