如果定义了具有给定签名的模板方法,是否可以编写测试仪?
该方法具有以下签名:
template<typename ReturnType>
ReturnType get(std::string) { return std::declval<ReturnType>(); }
我在这里搜索,但发现的只是依靠自动模板推导的机制 (例如How to test if template function exists at compile time)
答案 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>
仍然不会编译;请参阅下面的评论。