【发布时间】:2019-04-24 09:40:40
【问题描述】:
如果定义了具有给定签名的模板方法,是否可以编写测试器?
方法的签名如下:
template<typename ReturnType>
ReturnType get(std::string) { return std::declval<ReturnType>(); }
我在这里搜索过,但我发现的都是依赖于自动模板推导的机制 (例如How to test if template function exists at compile time)
【问题讨论】:
-
“但我发现的只是依赖于自动模板推导的机制” - 你为什么不直接使用它们?
-
我会怎么做?自动模板推导在我的示例中不起作用,因为该方法的任何参数都不是必需的类型
-
澄清一下:您是否需要一种方法来测试
template <typename> get(std::string)是否存在,或者是否可以调用特定的专业化get<T>(std::string)? -
题外话:您可以在
decltype()中使用std::declval(),而不是在函数体中。 -
@lisyarus 第二个@Scheff 如果定义了我帖子中的签名函数,则助手应该返回true。这是为了更好地阅读错误消息。
标签: c++ templates c++17 sfinae