【发布时间】:2016-03-06 14:05:41
【问题描述】:
请考虑以下代码sn-p:
template<typename T, class Tuple>
class vector
{
using size_type = typename Tuple::size_type;
template<typename... Elements,
typename = decltype(std::declval<Tuple>().reserve(size_type()))>
typename = decltype(std::declval<Tuple>().push_back(T())),
vector(Elements&&... elements)
{ /* ... */ }
};
我想定义一个嵌套结构supports_reserve_push_back,它派生自std::true_type,只要启用上面的构造函数(在另一种情况下,它派生自std::false_type)。
我该怎么做?
【问题讨论】:
-
如果它是唯一的 c'tor,使用 varargs 方法的旧重载结果可能会这样做。
-
@StoryTeller 不,还有更多的构造函数。特别是,还有另一个具有相同签名的构造函数。
-
嗯,显而易见的解决方案是复制启用 c'tor 的检查。
-
@StoryTeller 我不知道我需要如何定义结构。你能提供答案吗?
标签: c++ templates c++14 sfinae typetraits