0

假设你有一个带有参数类的模板

template <typename ConnectorClass>
struct myClass {

}

我想添加一个BOOST_ASSERT_MSG来验证ConnectorClass实现某种签名方法

returnType MethodName(param1, param2)

在这种情况下我应该如何编写断言条件?

编辑:由于这个问题似乎没有一个明确的解决方案,我发布了一个基于答案的一些参考的带有中间结果的子问题,请按照这里

4

3 回答 3

2

你不能。BOOST_ASSERT_MSG 在运行时进行评估。如果该类没有该成员,那么无论您的模板需要什么,您都会收到编译错误。

如果您的目标是更好的错误消息,请查看 Boost 的概念检查库。如果您的目标是让您的模板根据可用的成员执行不同的操作,请查看 Boost 的enable_if.

这是一个类似问题的答案

于 2010-10-25T15:17:42.857 回答
0

如果您在 Windows 上,并且不太挑剔,您可以通过__if_exists 执行此操作,这是 Visual C++ 的 hack 扩展

于 2010-10-25T15:08:35.123 回答
0

查看 Boost 中的各种静态断言实用程序。尤其是:

  • BOOST_STATIC_ASSERT(请参阅此处的文档)
  • BOOST_MPL_ASSERT(请参阅此处的文档)
于 2010-10-25T15:37:38.570 回答