代码之家  ›  专栏  ›  技术社区  ›  E. Williams

如何在宏函数参数中使用泛型类型

  •  2
  • E. Williams  · 技术社区  · 3 年前

    所以我定义了这个宏

    #define TEST_CHECK(cond) check(cond,__FILE__,__LINE__,"%s",#cond)
    

    实施 check(...) 作为:

    int check(int cond, const char* file, const char* line, const char* fmt, ...){
        // ...
        if(cond){printf("test passed");}
        else{ printf("test failed");}
        // ...
    }
    

    TEST_CHECK(max(1,2)==1);
    

    测试失败

    TEST_CHECK(max(-2,-3)==-2);
    


    但是现在我想打印预期的和观察到的结果,而不是只打印失败的文本。

    TEST_CHECK(max(2,3),3);
    

    测试失败:预期为3,但得到2

    我可以将我的函数更改为 check(int expected, int observed ...) 这会奏效的。但在这种情况下,我只适合整数验证。我还想让这个函数对double、float、bool、char、char[]、int[]、…)有用。

    我怎样才能解决这个问题?

    1 回复  |  直到 3 年前
        1
  •  1
  •   pale_rider    3 年前

    您可以使用模板函数。

    template <typename T>
    void check (T expected, T observed)
    {
        if (expected == observed)
            std::cout << "Test passed\n";
        else
            std::cout << "Test failed: Expected " << expected 
                      << "but got " << failed << std::endl;
    }