【发布时间】:2023-03-15 16:15:02
【问题描述】:
使用 c++14,我有一些类似于以下的函数声明。
template <class... Args>
struct potato {
template <class T, class = std::enable_if_t<!std::is_same<T, int>::value>>
const T& blee(size_t blou) const;
template <class T, class = std::enable_if_t<std::is_same<T, int>::value>>
const T& blee(size_t blou) const;
};
是否可以单独实现功能?据我所知,编译器无法弄清楚是什么实现了什么。例如:
template <class... Args>
template <class T, class>
const T& potato<Args...>::blee(size_t blou) const {
// do something
}
template <class... Args>
template <class T, class>
const T& potato<Args...>::blee(size_t blou) const {
// do something
}
此时enable_if 信息丢失。我是否在我的工具包中遗漏了一个技巧来完成这项工作?请注意,我宁愿不使用返回类型 enable_if 或参数 enable_if,因为它们是不敬虔的。
编辑:更新以更好地代表我的用例。
【问题讨论】:
-
为什么不用标签调度?
-
发帖的人已经回答了这个问题,这不是真的。链接的问题甚至没有单独使用声明和实现。
-
那么,你的实际问题是如何定义一个使用 SFINAE 的外联函数,对吧?
-
@NathanOliver 是的:)
标签: c++ c++11 c++14 sfinae enable-if