传递失败的模板参数
Pass a Failing Template Argument
Dan's answer to this question: 采用 DefaultType
模板参数。
是否可以传递一些强制编译时失败的东西?
例如,给定这个模板化函数:
template <typename T, typename R = enable_if_t<is_integral<T>::value, int>>
R foo(T bar) {return static_cast<R>(bar);}
这段代码可以正常编译:foo(13)
但是这段代码会失败:foo(13.0)
.
foo(13.0)
编译失败的原因是enable_if_t
未定义。是否有 "undefined" 的名称可以传递给上述 DefaultType
?
如果是这样,我应该能够通过调用 foo<int, undefined>(13)
并让它失败来测试它,如果实际上 undefined
是我正在寻找的类型。
编辑:
显然需要更多解释。
Dan的`static_case可以这样调用:
template<class T>
typename static_switch<sizeof(T),
int, // default case
static_case<sizeof(char),char>,
static_case<sizeof(short),short>,
static_case<sizeof(long),long>,
static_case<sizeof(long long),long long>>::type foo(T bar){ return reinterpret_cast<decltype(foo(bar))&>(bar);}
我想将 "undefined" 或其他任何内容传递给第二个参数,以使其在评估该参数时无法编译 only。 (标有"default case"的参数。)
在我的简单测试中,将任何两个参数传递给 foo
都会成功(例如 foo<int, int>(13);
)我想要一个参数来模仿 enable_if_t
导致它失败的效果(就像我们调用 foo<double>(13.0);
时一样)在示例中我说调用 foo<in, undefined>(13)
。我只想知道 "undefined" 是什么。
获得您正在谈论的 undefined
类型的最简单方法是:
std::enable_if_t<false>
因此您可以这样调用 foo
模板:
foo<int, std::enable_if_t<false>>(13)
并按照您的要求让它失败。
Dan's answer to this question: DefaultType
模板参数。
是否可以传递一些强制编译时失败的东西?
例如,给定这个模板化函数:
template <typename T, typename R = enable_if_t<is_integral<T>::value, int>>
R foo(T bar) {return static_cast<R>(bar);}
这段代码可以正常编译:foo(13)
但是这段代码会失败:foo(13.0)
.
foo(13.0)
编译失败的原因是enable_if_t
未定义。是否有 "undefined" 的名称可以传递给上述 DefaultType
?
如果是这样,我应该能够通过调用 foo<int, undefined>(13)
并让它失败来测试它,如果实际上 undefined
是我正在寻找的类型。
编辑:
显然需要更多解释。
Dan的`static_case可以这样调用:
template<class T>
typename static_switch<sizeof(T),
int, // default case
static_case<sizeof(char),char>,
static_case<sizeof(short),short>,
static_case<sizeof(long),long>,
static_case<sizeof(long long),long long>>::type foo(T bar){ return reinterpret_cast<decltype(foo(bar))&>(bar);}
我想将 "undefined" 或其他任何内容传递给第二个参数,以使其在评估该参数时无法编译 only。 (标有"default case"的参数。)
在我的简单测试中,将任何两个参数传递给 foo
都会成功(例如 foo<int, int>(13);
)我想要一个参数来模仿 enable_if_t
导致它失败的效果(就像我们调用 foo<double>(13.0);
时一样)在示例中我说调用 foo<in, undefined>(13)
。我只想知道 "undefined" 是什么。
获得您正在谈论的 undefined
类型的最简单方法是:
std::enable_if_t<false>
因此您可以这样调用 foo
模板:
foo<int, std::enable_if_t<false>>(13)
并按照您的要求让它失败。