首页 > 解决方案 > 在编译时检查类中的静态函数是否可用

问题描述

我目前正在为一个具有多个实现的应用程序连接一个单一的目的。它在运行时检查是否可以使用适当的实现或是否使用了回退。

为此,我希望所有实现都实现一个静态函数static bool is_available()

由于不能在底层基类中将静态函数抽象化,如果该方法未在子类中静态实现,是否有一些预处理器魔法可以让我输出错误消息?

标签: c++typetraits

解决方案


您可以在编译时使用模板对此进行测试。它是这样的(抱歉没有测试):

template<class Type_to_test, class Technical_Detail = void>
struct has_isAvilable : std::false_type {}

template<class Type_to_test>
struct has_isAvilable<Type_to_test, std::enable_if_t<
  std::is_same<bool,decltype(Type_to_test::is_available())>::value
> > : std::true_type {}

然后您可以在代码中的某处使用:

static_assert(has_isAvilable<Implementation>::value,"Usefull error message");

其中 Implementation 是您要测试的类。看看std::type_traits这方面的例子。


推荐阅读