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

时间:2016-02-26 09:14:47

标签: 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";
}

在这种情况下,当我输入结果时(取决于模板化的外部类),gcc和msvc都找不到重载的流操作符。我想做什么甚至可能?

1 个答案:

答案 0 :(得分:13)

Tmyclass<T>::result不可扣除。

您可以在课程中定义operator<<来解决您的问题:

struct result
{
    T value;


    friend std::ostream& operator<<(std::ostream& stream, const result& res)
    {
        return stream << res.value;
    }
};

Demo