不为内部类推导出模板参数

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)

演示