【发布时间】:2021-01-13 10:54:56
【问题描述】:
我写了这样的代码:
template <class T>
class A {
template <class U, class =
class std::enable_if_t<std::is_convertible_v<std::decay_t<U>, std::decay_t<T>>>>
void f(U&& val) {}
};
我希望我的班级用户只能使用可转换为 T 的类型调用 f。
std::decay 是多余的吗?如果我删除它,我可能会错过一些特殊情况?
【问题讨论】:
-
这取决于;你到底想问什么?也就是说,你试图阻止人们通过什么代码?
-
@NicolBolas,我正在编辑帖子。
-
"我希望我班级的用户只能使用可转换为 T 的类型调用 f。" 我可以从您的代码中猜到这一点。我想确切地了解你的意思。你的意思是你想让
f能够做T t = val;或类似的东西?您希望用户能够将数组或函数类型作为T传递吗? -
@NicolBolas,你能解释一下最后一句话的意思吗?
标签: c++ c++17 enable-if perfect-forwarding