首页 > 解决方案 > 访问嵌套模板结构的重载运算符上的封闭模板类数据成员

问题描述

可能更多的是设计问题而不是技术问题。

但无论如何,我怎样才能访问JolloManager它的嵌套结构中的数据成员实例?(访问deck?)

#include <array>
#include <iostream>
#include <numeric> //std::iota
#include <sstream>

template<std::size_t N>
class JolloManager
{
private:
    template<int ID, int c> struct PlayerCards
    {
        int id {ID};
        int cards[c] {0};
        friend std::istream& operator >> (std::istream& is, PlayerCards& p) {
            for(auto& i : p.cards) {
                is >> i;
                deck[i-1] = p.id; //error: invalid use of non-static data member 'JolloManager<N>::deck'
            }
            return is;
        }
    };
private:
    enum PlayerId { princeID = 100, princessID = 101 };
    PlayerCards<princeID,   2> prince;
    PlayerCards<princessID, 3> princess;
    std::array<int, N> deck;
public:
    JolloManager<N>() {
        std::iota(deck.begin(), deck.end(), 1);
    };
public:
    bool Read();
    int FinalCard();
};

template<std::size_t N>
bool JolloManager<N>::Read()
{
    static std::string line;
    std::getline(std::cin, line);
    std::istringstream issline(line);

    issline >> prince;
    issline >> princess;

    if(prince.cards[0] == 0) {
        return false;
    }
    return true;
}

int main()
{
    JolloManager<52> JManager;
    JManager.Read();


    return 0;
}

标签: c++

解决方案


推荐阅读