C++ 可选<;T>;实现-禁用可选(U&;)构造函数
我正在处理一个C++ 可选<;T>;实现-禁用可选(U&;)构造函数,c++,c++11,C++,C++11,我正在处理一个可选的类,因为我使用的是c++11,而编译器没有提供实现。我对右值引用构造函数有问题。以下构造函数似乎工作正常 Optional(); Optional(const ThisType& other); Optional(ThisType&& other); template <typename U> Optional(const Optional<U>& other); template <typename U>
可选的类,因为我使用的是c++11,而编译器没有提供实现。我对右值引用构造函数有问题。以下构造函数似乎工作正常
Optional();
Optional(const ThisType& other);
Optional(ThisType&& other);
template <typename U>
Optional(const Optional<U>& other);
template <typename U>
Optional(Optional<U>&& other);
template <typename... Args>
explicit Optional(Unused, Args&&... args);
template <typename U, typename... Args>
explicit Optional(Unused, InitializerList<U> initList, Args&&... args);
template <typename U>
Optional(const U& value);
则以下测试用例不起作用:
// Optional<T>(const Optional<T>&)
Opt o(Unused{});
Opt o2 = o;
编辑
可以将以下代码复制粘贴到文件中。我正在使用VS2013,我仔细检查了这个版本是否调用了正确的构造函数。有4行注释请提供MCVE:请注意,如果您想支持(比如)包含const
成员的类,那么在C++11中实现“可选”类型可能会很困难。@KerrekSB是的,这是真的,但我会自己使用它-大多数时间是简单类型。然而,这个问题似乎更“一般”。我想,enable_if是关键,但我没有正确地应用它。我不得不将实现添加到“MCVE”中,因为没有它,代码就可以编译。
// Optional<T>(const Optional<T>&)
Opt o(Unused{});
Opt o2 = o;
template <typename U, typename = typename EnableIf<!IsSame<DecayT<U>, Optional<U>>::Value>::Type>
Optional(U&& value);