这是我想要做的事情:
这是我目前的实现方式:
它完美地运作(如描述所示),但它引入了一个额外的辅助类型。
但是,我能否在不使用额外类型的情况下达到相同的结果?
template <typename T> void f(DisableDeduction<T> obj) {std::cout << obj;}
// Here DisableDeduction<T> aliases T, but in a such way
// that would prevent compiler from deducing T based
// on provided argument.
/* ... */
f<int>(1); // Works.
f(1); // Error, can't deduce template parameter based on argument.
这是我目前的实现方式:
template <typename T> struct DisableDeduction_Internal {using type = T;};
template <typename T> using DisableDeduction = typename DisableDeduction_Internal<T>::type;
它完美地运作(如描述所示),但它引入了一个额外的辅助类型。
但是,我能否在不使用额外类型的情况下达到相同的结果?
std::enable_if_t<true, T>
? - Jarod42std::type_identity_t
。 - underscore_d