在不依赖自动模板推导的情况下检查模板方法是否存在

时间:2019-04-24 09:40:41

标签: c++ templates c++17 sfinae

如果定义了具有给定签名的模板方法,是否可以编写测试仪?

该方法具有以下签名:

template<typename ReturnType>
ReturnType get(std::string) { return std::declval<ReturnType>(); }

我在这里搜索,但发现的只是依靠自动模板推导的机制  (例如How to test if template function exists at compile time

1 个答案:

答案 0 :(得分:4)

#include <type_traits>
#include <string>

template <typename T>
constexpr bool test() { return is_invocable<decltype(get<T>), std::string>::value; }

请参见std::is_invocable。但是,如果test<T>没有编译,get<T>仍然不会编译;请参阅下面的评论。