我正在尝试为 BOOST_CHECK_PREDICATE 构建一个自定义谓词,其中谓词本身是一个模板函数。我的示例如下所示:
#define BOOST_TEST_MODULE Module
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
// custom predicate
template <typename U, typename V>
bool is_close_enough(const U& a, const V& b)
{
return std::abs(a-b) < 2.0;
}
BOOST_AUTO_TEST_SUITE(boostUnitTestLearningTests)
BOOST_AUTO_TEST_CASE(Test_Templated_Predicate)
{
BOOST_CHECK_PREDICATE(is_close_enough, (4)(6));
BOOST_CHECK_PREDICATE(is_template_close_enough, (4.0)(6.5));
}
BOOST_AUTO_TEST_SUITE_END()
使用 MS Visual C++ 2010 编译会出现以下错误:
3>..\boost_test\testSystem.cpp(42): 错误 C2780: 'bool boost::test_tools::tt_detail::check_frwd(Pred,const boost::unit_test::lazy_ostream &,boost::test_tools::const_string, size_t,boost::test_tools::tt_detail::tool_level,boost::test_tools::tt_detail::check_type,const Arg0 &,const char *,const Arg1 &,const char *,const Arg2 &,const char *,const Arg3 &,const char *,const Arg4 &,const char *)' : 需要 16 个参数 - 提供 10 个 3>
C:\Boost\include\boost-1_51\boost/test/test_tools.hpp(523) :参见 'boost::test_tools::tt_detail::check_frwd' 3>..\boost_test\testSystem.cpp(42) 的声明: 错误 C2780: 'bool boost::test_tools::tt_detail::check_frwd(Pred,const boost::unit_test::lazy_ostream &,boost::test_tools::const_string,size_t,boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type,const Arg0 &,const char *,const Arg1 &,const char *,const Arg2 &,const char *,const Arg3 &,const char *)' :需要 14 个参数 - 10提供 3> C:\Boost\include\boost-1_51\boost/test/test_tools.hpp(523) : 见声明 'boost::test_tools::tt_detail::check_frwd' 3>..\boost_test\testSystem.cpp (42): 错误 C2780: 'bool boost::test_tools::tt_detail::check_frwd(Pred,const boost::unit_test::lazy_ostream &,boost::test_tools::const_string,size_t,boost::test_tools::tt_detail::tool_level,boost::test_tools::tt_detail::check_type,const Arg0 &,const char *,const Arg1 &, const char *,const Arg2 &,const char *)' : 需要 12 个参数 - 提供 10 个 3> C:\Boost\include\boost-1_51\boost/test/test_tools.hpp(523) : 见 'boost: :test_tools::tt_detail::check_frwd' 3>..\boost_test\testSystem.cpp(42): error C2896: 'bool boost::test_tools::tt_detail::check_frwd(Pred,const boost::unit_test::lazy_ostream & ,boost::test_tools::const_string,size_t,boost::test_tools::tt_detail::tool_level,boost::test_tools::tt_detail::check_type,const Arg0 &,const char *,const Arg1 &,const char *)' : 不能使用函数模板'bool is_close_enough(const U &,const V &)' 作为函数参数 3> ..\boost_test\testSystem.cpp(18) : 参见 'is_close_enough' 的声明 3>..\boost_test\testSystem.cpp(42): error C2784: 'bool boost: :test_tools::tt_detail::check_frwd(Pred,const boost::unit_test::lazy_ostream &,boost::test_tools::const_string,size_t,boost::test_tools::tt_detail::tool_level,boost::test_tools::tt_detail: :check_type,const Arg0 &,const char *,const Arg1 &,const char *)' : 无法从“重载函数类型”中推断出“重载函数类型”的模板参数 3>check_frwd(Pred,const boost::unit_test::lazy_ostream &,boost::test_tools::const_string,size_t,boost::test_tools::tt_detail::tool_level,boost::test_tools::tt_detail::check_type,const Arg0 &, const char *,const Arg1 &,const char *)' : 无法从“重载函数类型”中推断出“重载函数类型”的模板参数 3>check_frwd(Pred,const boost::unit_test::lazy_ostream &,boost::test_tools::const_string,size_t,boost::test_tools::tt_detail::tool_level,boost::test_tools::tt_detail::check_type,const Arg0 &, const char *,const Arg1 &,const char *)' : 无法从“重载函数类型”中推断出“重载函数类型”的模板参数 3>
C:\Boost\include\boost-1_51\boost/test/test_tools.hpp(523) :参见 'boost::test_tools::tt_detail::check_frwd' 3>..\boost_test\testSystem.cpp(42) 的声明: 错误 C2780: 'bool boost::test_tools::tt_detail::check_frwd(Pred,const boost::unit_test::lazy_ostream &,boost::test_tools::const_string,size_t,boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type,const Arg0 &,const char *)' :需要 8 个参数 - 提供 10 个
有什么想法我在这里做错了吗?