boost_assert参数类实现某种方法

时间:2010-10-25 14:53:43

标签: c++ boost metaprogramming assert compile-time

假设您有一个采用参数类

的模板
template <typename ConnectorClass>
struct myClass {

}

我想添加BOOST_ASSERT_MSG来验证ConnectorClass是否实现了某种签名方法

returnType MethodName(param1, param2)

在这种情况下我应该怎么写断言条件?

编辑:由于这个问题似乎没有一个明确的解决方案,我发布了一个子问题,基于对答案的一些参考文献的中间结果 请关注here

3 个答案:

答案 0 :(得分:2)

你做不到。在运行时期间评估BOOST_ASSERT_MSG。如果该类没有该成员,则无论模板在何处预期,您都会收到编译错误。

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

Here's an answer to a similar question

答案 1 :(得分:0)

如果您使用的是Windows,并且不太挑剔,可以通过__if_exists, a hack extension to Visual C++

执行此操作

答案 2 :(得分:0)

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

  • BOOST_STATIC_ASSERT(请参阅文档here
  • BOOST_MPL_ASSERT(请参阅文档here