我想做这样的事情:
#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";
}
在这种情况下,当我输入结果时(取决于模板化的外部类),gcc和msvc都找不到重载的流操作符。我想做什么甚至可能?
答案 0 :(得分:13)
T
对myclass<T>::result
不可扣除。
您可以在课程中定义operator<<
来解决您的问题:
struct result
{
T value;
friend std::ostream& operator<<(std::ostream& stream, const result& res)
{
return stream << res.value;
}
};