Tôi có hai chức năng mẫu quá tải sau:thống nhất const T & T && quá tải
template<typename T>
optional<T> some(const T& x)
{
return optional<T>(x);
}
template<typename T>
typename std::enable_if<std::is_rvalue_reference<T&&>::value, optional<T> >::type
some(T&& x)
{
return optional<T>(std::move(x));
}
nỗ lực đầu tiên của tôi tại thống nhất quá tải qua chuyển tiếp hoàn hảo thất bại:
template<typename T>
optional<T> some(T&& x)
{
return optional<T>(std::forward<T>(x));
}
error: forming pointer to reference type 'const std::basic_string<char>&'
Như đã nỗ lực thứ hai của tôi:
template<typename T>
optional<typename std::remove_reference<T>::type> some(T&& x)
{
return optional<typename std::remove_reference<T>::type>(std::forward<T>(x));
}
error: no matching function for call to
'std::basic_string<char>::basic_string(gpa::optional<const std::basic_string<char> >)'
Có cách nào hợp lý để thống nhất tình trạng quá tải hoặc tôi chỉ nên sống với chúng?
Bạn nên cung cấp định nghĩa về 'tùy chọn <> 'là gì. –
Về cơ bản nó là một bản sao đồ chơi của 'boost :: optional'. – fredoverflow
... Tuy nhiên, câu hỏi là viết tắt, bạn có thể cung cấp định nghĩa không? Tôi có cảm giác rằng vấn đề là với giao diện 'tùy chọn' (nghĩa là chuyển tiếp hoàn hảo là giải pháp cho' some', bạn có thể cần phải tinh chỉnh nó để khớp 'tùy chọn') –