kam*_*los 7 c++ templates c++11
我想做这样的事情:
#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";
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当我输入结果时(取决于模板化的外部类),gcc和msvc都不会找到重载的流操作符.我甚至想做什么?
Jar*_*d42 13
T是不可扣除的myclass<T>::result.
您可以operator<<在课程内部定义以解决您的问题:
struct result
{
T value;
friend std::ostream& operator<<(std::ostream& stream, const result& res)
{
return stream << res.value;
}
};
Run Code Online (Sandbox Code Playgroud)