tôi muốn làm một cái gì đó như thế này:Template đối số không suy luận cho lớp bên trong
#include <iostream>
template<typename T>
class myclass
{
T something;
public:
myclass(T something) : something{ something }
{ }
struct result
{
T value;
};
result get_result()
{
return{ something };
}
};
template<typename T>
std::ostream& operator<<(std::ostream& stream, const typename myclass<T>::result& res)
{
return stream << res.value;
}
int main()
{
myclass<int> m(0);
std::cout << m.get_result() << "\n";
}
Trong trường hợp này không phải gcc cũng không msvc tìm các nhà điều hành dòng quá tải khi tôi đặt trong một kết quả (đó là phụ thuộc vào một templated lớp ngoài). Là những gì tôi đang cố gắng làm thậm chí có thể?
thông báo lỗi diplay là gì bởi trình biên dịch? – Garf365
Chỉ đơn giản là không có cách chung cho trình biên dịch để tìm ra một loại duy nhất để suy ra. – chris
Vấn đề thực tế là loại lồng nhau có thể không phải là duy nhất: 'mẫu < > lớp myclass {using result = myclass :: result'. Trong trường hợp này, hai instantiations chia sẻ một loại lồng nhau duy nhất. –
MSalters