簡體   English   中英

模板類作為函數參數 [C++]

[英]Template class as a function parameter [C++]

問題的前提是如何將模板化的類作為參數傳遞給另一個函數或至少獲得相同的效果:

下面是我的代碼的精簡版

template<uint8_t _bus>
class Com {
public:
    uint8_t write() { return _bus; /* does something with template param */}
};


class Instruction
{
public:
    int member;
    void transmitFrame(char *msg) { 
        member = Com.write(msg); /* need to pass in Com object somehow */
    }
};

main(){
    Com<8> myCom;
    Instruction myInstruction;

    char[] msg = {'h', 'e', 'l', 'l', 'o'};
    myInstruction.transmitFrame(msg);
}

上面的代碼不會編譯。 我的第一個想法是擴展Com類,但據我所知,您不能擴展類模板。 我的第二個想法是在模板中有一個模板? (所以使用Com模板的模板使Instruction類成為模板類)但是我在那個雜草中並且不確定這是否可能。

Com對象在我嘗試使用Instruction類時已被實例化。 所以不知何故,我需要將模板化的Com對象放入Instruction類中,以便我可以訪問它。

到時候我就沒想法了……

您似乎試圖直接在Com類上調用write ,而不是實例。

您可能希望將Com的實例傳遞給transmitFrame ,但要做到這一點,您必須傳遞模板信息。

template <uint8_t N>
void transmitFrame(Com<N> &com, char *msg) { 
    com.write(msg); /* need to pass in Com object somehow */
}

或者,如果您知道模板值為8

void transmitFrame(Com<8> &com, char *msg) { 
    com.write(msg); /* need to pass in Com object somehow */
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM